我試圖通過節點圖做廣度優先搜索遍歷,之後我將嘗試找到節點與另一個節點之間的最短距離。這是維基百科的BFS算法是什麼樣子:使用BFS算法獲取兩個節點之間的最短路徑
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
我有我自己的節點類設置爲最大節點的距離。我的版本基於第一個代碼的風格:
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)
我試圖讓這個代碼也找到節點和另一個節點之間的最短路徑。例如
procedure BFS(G, Node* from, Node* to)
如何修改BFS代碼來執行此操作?如果在這個循環內部是不可能的,那麼還有什麼其他的方式來做到這一點?
請告訴我,如果我的代碼有任何混淆或我在問什麼。謝謝!