Erhöhung des Graphen breadth_first_search () verwendet einen Pfad in einem ungewichteten, ungerichteten Graphen zu finden

StackOverflow https://stackoverflow.com/questions/442834

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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top