我关注以下链接。
DFS:http://algs4.cs.princeton.edu/code/edu/princeton/cs/algs4/DepthFirstPaths.java.html
其中pathTo方法就像这样
public Iterable<Integer> pathTo(int v) {
validateVertex(v);
if (!hasPathTo(v)) return null;
Stack<Integer> path = new Stack<Integer>();
for (int x = v; x != s; x = edgeTo[x])
path.push(x);
path.push(s);
return path;
}
BFS:http://algs4.cs.princeton.edu/code/edu/princeton/cs/algs4/BreadthFirstPaths.java.html
其中pathTo方法是这样的
public Iterable<Integer> pathTo(int v) {
validateVertex(v);
if (!hasPathTo(v)) return null;
Stack<Integer> path = new Stack<Integer>();
int x;
for (x = v; distTo[x] != 0; x = edgeTo[x])
path.push(x);
path.push(x);
return path;
}
我怀疑为什么在{BFS}中使用for (x = v; distTo[x] != 0; x = edgeTo[x])
而在DFS中使用for (int x = v; x != s; x = edgeTo[x])
。如果我在BFS的pathTo方法中使用x != s
而不是distTo[x] != 0
会出现什么问题?
答案 0 :(得分:0)
您的观察是正确的,条件x != s
和distTo[x] != 0
是可以互换的。原因是distTo[s]
为0
,因此当遇到source vertex
时,循环会中断。因此,当我们遇到source vertex
时,要打破循环,两个条件中的任何一个都会起作用。