2011-01-17 6 views
6

Używam BGL do przechowywania mojej DAG. Wierzchołki mają stany. Biorąc pod uwagę zmianę stanu w jednym z wierzchołków, chcę zaktualizować wierzchołki zależne. To mogę zrobić, używając boost :: depth_first_search i niestandardowego gościa.Stop boost :: depth_first_search wzdłuż określonej głębokości, jeśli spełnione są określone kryteria

Logika polega na tym, że nie chcę aktualizować szukanego wierzchołka i jego zależności, jeśli wierzchołek znajduje się w określonym stanie. Zasadniczo chcę kontroli nad en-queuing wierzchołków w dfs lub bfs. Jaki jest najlepszy sposób osiągnięcia tego w BGL.

Dzięki.

Odpowiedz

9

Wygląda na to, że boost :: depth_first_search nie obsługuje tego, ale bazowe polecenie boost :: depth_first_visit robi, poprzez swoje drugie przeciążenie, które pozwala na "funkcję terminatora" (TerminatorFunc).

Można więc skopiować implementację boost :: depth_first_search i zastąpić parametr detail :: nontruth2() przekazany do boost :: depth_first_visit za pomocą własnej (nie trywialnej) funkcji terminatora.

+0

Dzięki, działa. – Vikas

0

Brak zakończenia w pierwszym wyszukiwaniu - to najgłupsza rzecz w bibliotece grafów, jaką kiedykolwiek widziałem.

Może być, to może być wyjście: depth_first_search na filters_graph. Możesz jakoś oznaczyć stop-vertex, a w funkcji krawędzi filtrów filter_graph po prostu ukryj krawędzie padające

Powiązane problemy