簡體   English   中英

BGL中的Lengauer Tarjan算法(增強圖庫)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM