2011-01-17 9 views
6

私はBGLを使用してDAGを保存しています。頂点には状態があります。頂点の1つで状態の変化が与えられたら、私は従属頂点を更新したいと思います。これは私がboost :: depth_first_searchとカスタムビジターを使用して行うことができます。特定の基準が満たされている場合、特定の深度に沿ってboost :: depth_first_searchを停止してください

ここで論理は、頂点が特定の状態にある場合、検索された頂点とその依存関係を更新したくないということです。基本的には、dfsまたはbfsのいずれかで頂点のエンキューを制御する必要があります。 BGLでこれを達成する最良の方法は何ですか?

ありがとうございました。

答えて

9

boost :: depth_first_searchはこれをサポートしていないようですが、基礎となるboost :: depth_first_visitは、「ターミネータ機能」(TerminatorFunc)を可能にする第2のオーバーロードによって機能します。

boost :: depth_first_searchの実装をコピーして、boost :: depth_first_visitに渡されたdetail :: nontruth2()パラメータを独自の(自明でない)ターミネータ関数に置き換えることができます。

+0

ありがとう、それは動作します。 – Vikas

0

深さ優先検索での終了の欠如 - 今まで見たグラフライブラリの中で最も愚かなことです。

かもしれないが、これは脱出の可能性があります:filtered_graphのdepth_first_search。何らかの形で停止頂点をマークすることができ、filtered_graphのfilter-edges関数はインシデントエッジを隠すだけです

関連する問題