Erhöhung des Graphen breadth_first_search () verwendet einen Pfad in einem ungewichteten, ungerichteten Graphen zu finden
-
22-07-2019 - |
Frage
Ich bin ein adjacency_list Graph verwenden, mit ungerichteten und ungewichtete Kanten. Ich brauche einen kürzesten Weg zwischen Knoten u und Knoten v zu finden. Sollte ich breadth_first_search () ausgehend von u? Wenn v Erreichen Wie erhalte ich den Weg, und wie verhindere ich die Suche?
Danke!
Lösung
Sie sollten eine der kürzesten Pfad Algorithmen verwenden, Dijkstra Shortest Path die am besten geeignete ist, da der Pfad zwischen nur zwei Eckpunkten finden müssen. Es gibt eine Beispiel für seine Verwendung in der Boost-Verteilung. Es gibt mehrere Optionen für den Erhalt Ausgang aus dieser Funktion: entweder durch eine Entfernung Eigenschaftskarte versorgen oder einen Vorgänger Karte bauen oder einen benutzerdefinierten Besucher schreiben
.Andere Tipps
Ja, do breadth_first_search () von u zu starten.
FOR every vertex i meet
IF i==v: BREAK
record predecessor of i as i.p
Um den kürzesten Weg zu finden, von v starten:
PRINT_PATH(u, v)
IF v==u
print u
ELSEIF v.p==NIL
print 'no path from u to v exists'
ELSE PRINT_PATH(u, v.p)
print v
Sie benötigen einen Minimum Spanning Tree : Suchalgorithmus. Es ist durchaus ein einfacher direkter Greedy-Algorithmus.