Immer kürzesten Pfad zwischen zwei Knoten mit BFS-Algorithmus
Ich versuche zu tun, Breadth-First Search traversal durch einen Graphen aus Knoten, nach dem ich werden versuchen, den kürzesten Abstand zwischen einem Knoten und einem anderen. Dies ist, was wikipedia BFS-Algorithmus sieht wie folgt aus:
procedure BFS(G,v) is
let Q be a queue
Q.push(v)
label v as discovered
while Q is not empty
v ← Q.pop()
for all edges from v to w in G.adjacentEdges(v) do
if w is not labeled as discovered
Q.push(w)
label w as discovered
Habe ich meine eigene Node-Klasse mit dem Abstand der Knoten auf max. Meine version basiert auf dem Stil des ersten-code:
class Node { //my version
string name;
vector<Node*> adj;
int dist; //initially set to int max
int prev;
int index;
}
procedure BFS(G, Node* v)
let Q be a queue
v->distance = 0
Q.push(v)
label v as discovered
while Q is not empty
Node* n = q.front();
v = Q.pop()
for each node w adj vector of n
Node* neighbor = G[w]
if neighbor->distance == max
neighbor->distance = n->distance + 1
neighbor->prev = n->index
q.push(neighbor)
Ich versuche, diesen code auch finden den kürzesten Weg zwischen einem Knoten und einem anderen Knoten. z.B.
procedure BFS(G, Node* from, Node* to)
Wie kann ich ändern, das BFS-code, dies zu tun? Wenn es nicht möglich ist innerhalb dieser Schleife, was andere Weg ist da, es zu tun?
Bitte informieren Sie mich, wenn es eine Verwechslung mit meinem code, oder was ich verlange. Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Regel die BFS-Algorithmus ist einfach, um zu Fuß alle Knoten in den Graphen in einem Atemzug erste Weise. Als adaptiert auf einen DFS - (depth-first) - algorithmen, die üblicherweise mit Rekursion.
Für die Zwecke der Suche nach der kürzesten Strecke, die Sie brauchen, um zu ändern den Algorithmus:
werden muss:
Obwohl dies führt zu genau den gleichen Algorithmus. Aber wenn die Kanten des Graphen haben die Entfernungen andere als 1, dann ist dies erforderlich.
Verwenden Sie Ihren Algorithmus, der versucht zu finden, kürzeste Entfernung von nodeA zu nodeB
Wenn alle Kanten haben den Abstand 1 stoppen Sie den Algorithmus, der moment, Sie finden nodeB das erste mal. Allerdings, wenn Ihre Kanten haben eine variable Distanz, die Sie benötigen, um führen Sie den BFS-Algorithmus zur Fertigstellung.
Den besten Weg zu finden den kürzesten Weg zwischen 2 Knoten in einem graph wird in der Regel durch die Verwendung Der Dijkstra-Algorithmus
Es hat einige ähnlichkeiten zu einem Atem-Zuerst-Suche, ist aber schneller, weil die Nutzung der priority-queue.