使用BFS和DFS查找图中两个节点之间的路径

时间:2017-02-26 06:43:32

标签: graph-algorithm depth-first-search breadth-first-search

我关注以下链接。

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会出现什么问题?

1 个答案:

答案 0 :(得分:0)

您的观察是正确的,条件x != sdistTo[x] != 0是可以互换的。原因是distTo[s]0,因此当遇到source vertex时,循环会中断。因此,当我们遇到source vertex时,要打破循环,两个条件中的任何一个都会起作用。