【发布时间】:2015-03-02 04:41:46
【问题描述】:
我正在尝试通过节点图进行广度优先搜索遍历,之后我将尝试找到一个节点与另一个节点之间的最短距离。这是维基百科的 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 代码来执行此操作?如果在这个循环中不可能,还有什么其他方法可以做到?
如果我的代码或我的要求有任何混淆,请通知我。谢谢!
【问题讨论】:
标签: c++ graph traversal breadth-first-search