【发布时间】:2013-11-19 23:46:37
【问题描述】:
我有这个工作代码,用于以非递归方式查找源到目标之间的路径。 我想递归地实现,但我很难做到。
这是我的非递归实现代码
public boolean depthFirstSearch(String name1, String name2){
Vertex source = vertexMap.get(name1);
Vertex dest = vertexMap.get(name2);
clearAll();
Stack<Vertex> stack = new Stack<Vertex>();
source.setVisited(true);
stack.push(source);
while(!stack.isEmpty()){
source = stack.peek();
System.out.println(source.name);
if (dest.name.equals(source.name))
return true;
Vertex v = adjacentUnvisitedVertex(source);
if (v!=null){
v.setVisited(true);
v.prev=source;
stack.push(v);
}
else stack.pop();
}
if (!source.name.equals(dest.name)){
System.out.println("destination cannot be reached");
return true;
}
else return false;
}
private Vertex adjacentUnvisitedVertex(Vertex v){
for (Edge e : v.adj){
if (!e.target.isVisited){
return e.target;
}
}
return null;
}
这里有一个简单的 DFS 递归实现,它访问所有节点:
static void dfs (Graphnode n) {
n.setVisited( true );
Iterator it = n.getSuccessors().iterator();
while (it.hasNext()) {
Graphnode m = (Graphnode)it.next();
if (! m.getVisited()) dfs(m);
}
}
我想实现在两个节点 A 和 B 之间查找路径。 因此 dfs 将采用两个节点并递归查找路径。
谢谢
【问题讨论】:
标签: algorithm recursion graph path depth-first-search