2011-01-17 5 views
6

Ich verwende BGL, um meine DAG zu speichern. Vertices haben Zustände. Bei einer Zustandsänderung in einem der Vertices möchte ich abhängige Vertices aktualisieren. Dies kann ich mit boost :: depth_first_search und einem benutzerdefinierten Besucher tun.Stop boost :: depth_first_search entlang einer bestimmten Tiefe, wenn bestimmte Kriterien erfüllt sind

Jetzt ist die Logik, dass ich einen gesuchten Scheitelpunkt und seine abhängigen nicht aktualisieren möchte, wenn der Scheitelpunkt in einem bestimmten Zustand ist. Im Grunde möchte ich über das Einreihen von Scheitelpunkten in dfs oder bfs steuern. Was ist der beste Weg, dies in BGL zu erreichen?

Danke.

Antwort

9

Es scheint, dass boost :: depth_first_search dies nicht unterstützt, aber die zugrunde liegende boost :: depth_first_visit tut, durch seine 2. Überladung für eine "Terminator-Funktion" (TerminatorFunc).

Sie könnten also die Implementierung von boost :: depth_first_search kopieren und den detail :: nottruth2() Parameter, der an boost :: depth_first_visit übergeben wird, durch eine eigene (nicht-triviale) Terminatorfunktion ersetzen.

+0

Danke, es funktioniert. – Vikas

0

Fehlende Beendigung in der Tiefe-zuerst-Suche - ist die blödeste Sache in der Diagrammbibliothek, die ich jemals gesehen habe.

Vielleicht ist dies der Ausweg: depth_first_search auf filtered_graph. Sie können den Stop-Scheitelpunkt irgendwie markieren, und in der Filter-Kanten-Funktion von filtered_graph verstecken Sie einfach die einfallenden Kanten

Verwandte Themen