![](/img/trans.png)
[英]Computing a dominator graph using Boost's Lengauer Tarjan algorithm and display it using graphviz
[英]Lengauer Tarjan Algorithm in BGL (boost graph library)
我需要為給定的圖形創建一個控制樹。 我擁有的代碼可以編譯並運行,沒有錯誤,但是輸出看起來與輸入完全相同。
我為圖表定義了以下類型(待分析)
typedef boost::adjacency_list<boost::listS, boost::vecS,
boost::bidirectionalS, vertex_info, edge_info> Graph;
我想讓另一個對象包含相應的支配者樹。 我嘗試了以下方法:
// dominator tree is an empty Graph object
dominator_tree = trace;
typedef typename boost::graph_traits<Graph>::vertex_descriptor Vertex;
typedef typename boost::property_map<Graph, boost::vertex_index_t>::type IndexMap;
typedef typename boost::iterator_property_map<typename std::vector<Vertex>::iterator, IndexMap> PredMap;
IndexMap indexMap(get(boost::vertex_index, dominator_tree));
std::vector<Vertex> domTreePredVector = std::vector<Vertex>(
num_vertices(dominator_tree),
boost::graph_traits<Graph>::null_vertex());
PredMap domTreePredMap = make_iterator_property_map(
domTreePredVector.begin(), indexMap);
lengauer_tarjan_dominator_tree(dominator_tree, vertex(0, dominator_tree),
domTreePredMap);
當我將dominator_tree的內容輸出到.dot文件時,它與trace中的內容完全相同。 即看起來上面最后一行的調用沒有更改任何內容。 輸入圖如下所示: http : //s24.postimg.org/y17l17v5x/image.png
INIT節點是節點0。如果我選擇其他任何節點作為該函數的第二個參數,它仍將返回相同的結果。
我究竟做錯了什么?? 感謝任何幫助。
看一下文檔( http://www.boost.org/doc/libs/1_40_0/libs/graph/doc/lengauer_tarjan_dominator.htm ),我看到第一個參數標記為IN。
這意味着這僅是輸入參數。 因此,您不應期望它會被更改!
THIRD參數標記為OUT。 因此,這是將在調用后更改的值。 根據文檔:
OUT:DomTreePredMap domTreePredMap父級樹,其中父級是每個孩子的直接父級。
因此,如果要更改圖形,則必須自己做:刪除所有現有邊,然后遍歷樹,按照樹指定的方式將邊添加到圖形中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.