【发布时间】:2013-11-20 19:35:02
【问题描述】:
我正在尝试实现 DFS 的递归版本,以便在两个节点之间进行深度优先搜索。 这是我的代码。如果存在路径,该方法将返回 true,并且它还会更新节点的 prev 字段以跟踪路径。我已经使用堆栈实现了这种非递归方式,它工作正常,即here.。这个不工作。那就是它没有给我从节点 A 到节点 B 的路径。它似乎总是返回 false。
public boolean recursiveDFS(String start, String end){
clearAll();
Vertex source = vertexMap.get(start);
Vertex dest = vertexMap.get(end);
clearAll();
return recursiveDFShelper(source,dest);
}
private boolean recursiveDFShelper(Vertex sor, Vertex des){
if (!sor.name.equals(des.name)){
sor.setVisited(true);
Iterator<Edge> it = sor.adj.iterator();
while (it.hasNext()){
Vertex v = it.next().target;
if(!v.isVisited){
sor.prev=v;
recursiveDFShelper(v, des);
}
}
return false;
}
else
return true;
}
编辑:根据以下建议,我有此代码
public boolean recursiveDFS(String start, String end){
clearAll();
Vertex source = vertexMap.get(start);
Vertex dest = vertexMap.get(end);
clearAll();
return recursiveDFShelper(source,dest);
}
private boolean recursiveDFShelper(Vertex sor, Vertex des){
//System.out.println(sor.name);
if (!sor.name.equals(des.name)){
sor.setVisited(true);
System.out.println(sor.adj);
Iterator<Edge> it = sor.adj.iterator();
while (it.hasNext()){
Vertex v = it.next().target;
if(!v.isVisited){
v.prev=sor;
System.out.printf("prev of %s is %s\n",sor,sor.prev);
return recursiveDFShelper(v, des);
}
}
//System.out.println("returning false");
return false;
}
else {
System.out.println("returning true");
return true;
}
}
对于像这样的给定有向图,
A B
B C
C D
A E
E D
它能够找到从 A 到 D 的正确路径,但从 A 到 E 失败了,而 E 仅在一个节点之外。
【问题讨论】:
标签: java recursion path depth-first-search