我正在通过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
放在哪里?
答案 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;
}
阵列距离将存储每个节点的最短路径