递归DFS模板以找到最短路径

时间:2019-04-16 11:09:07

标签: java algorithm depth-first-search

我正在通过dfs-template I - LeetCode

学习DFS。

它引入了递归模板

/*
 * Return true if there is a path from cur to target.
 */
boolean DFS(Node cur, Node target, Set<Node> visited) {
    return true if cur is target;
    for (next : each neighbor of cur) {
        if (next is not in visited) {
            add next to visted;
            return true if DFS(next, target, visited) == true;
        }
    }
    return false;
}

最后提出一个问题

  

在上面的模板中,我们在找到first路径时停止。

     

如果您想找到shortest路径怎么办?

     

提示:再添加一个参数以指示您已经找到的最短路径。

如何找到最短路径?

我假设应该添加一个step参数,以记住每次遍历的depth,在用尽所有可能的路径之后,比较深度并返回最小值。

参数step放在哪里?

1 个答案:

答案 0 :(得分:1)

distances = new int[numberOfNodes];
boolean DFS(Node cur, Node target, Set<Node> visited, level) {
    for (next : each neighbor of cur) {
        if (next is not in visited and level + 1 < distances[next]) {
            distances[neighbor] = level + 1
            add next to visted;
            DFS(next, target, visited, level + 1)
        }
    }
    return false;
}

阵列距离将存储每个节点的最短路径