Algorithm Java中深度优先搜索从源到目标路径的递归实现
我有这段工作代码,用于非递归地查找源到目标之间的路径。 我想递归地实现,但我在如何实现上有困难 这是我的非递归实现代码Algorithm Java中深度优先搜索从源到目标路径的递归实现,algorithm,recursion,graph,path,depth-first-search,Algorithm,Recursion,Graph,Path,Depth First Search,我有这段工作代码,用于非递归地查找源到目标之间的路径。 我想递归地实现,但我在如何实现上有困难 这是我的非递归实现代码 public boolean depthFirstSearch(String name1, String name2){ Vertex source = vertexMap.get(name1); Vertex dest = vertexMap.get(name2); clearAll(); Stack<V
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;
}
我想实现查找两个节点A和B之间的路径。
因此dfs将采用两个节点,并递归地查找节点之间的路径
谢谢堆栈的位置。push()似乎是递归调用的自然位置。pop()可能对应于返回false作为结果 但是将递归的
dfs()
函数转换为您需要的函数可能更简单:
dfs()
转换为您的目标数据结构(Graphnode
->Vertex
,迭代器
)System.out.println()
一起工作。这可能是最困难的部分。如果您卡在那里,请将输出张贴到此处dest
参数,并检查节点是否匹配(在本例中,在循环后返回true
,否则返回false
)。确保检查循环中递归dfs()
调用的结果,如果找到元素,则返回true
递归上的“depthFirstSearch(String name1,String name2)”是如何发生的?传递相同的name1和name2?我将把递归放在一个单独的助手方法中,该方法使用
Vertex
source
和dest
参数在递归方法中。顺便问一下:为什么要执行dest.name.equals(source.name)
而不仅仅是dest==source
?正确地进行dest==source身份检查..但我认为这不重要。事实上,顶点不需要正确地实现equals方法?我不知道如何实现递归?你能给出一点更具体的步骤吗?谢谢==比equals快,并且如果你想检查身份,那该做什么呢?节点是相等的是什么意思?它们不一定因为连接而相同吗?Re:更具体的步骤:我在上面的答案中添加了一些细节。
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);
}
}