Computer science 有向图中的FindAllPath算法正确吗?

Computer science 有向图中的FindAllPath算法正确吗?,computer-science,graph-algorithm,Computer Science,Graph Algorithm,我在寻找一种算法,在有向图中打印两个节点之间的所有可能路径 我看到了: procedure FindAllPaths(u, dest) { push u to stack; if(u == dest) { print stack; } else { foreach v that is adjacent with u and not in stack now { FindAllPaths(v, des

我在寻找一种算法,在有向图中打印两个节点之间的所有可能路径

我看到了:

    procedure FindAllPaths(u, dest)
{
   push u to stack;
   if(u == dest)
   {
      print stack;
   }
   else
   {
      foreach v that is adjacent with u and not in stack now
      {
         FindAllPaths(v, dest);
      }
   }
   pop from stack;
}
但当我运行它时,它会打印出一条正确的路径,并进入一个无限循环并打印出该路径!! 有什么问题吗


特别感谢,

这里是您算法的JavaScript实现,并附有示例图。它在这里起作用。如果您发现您的实现存在差异,请发布更多信息:

var edges = [
    {from:0, to:0},
    {from:0, to:1},
    {from:0, to:2},
    {from:1, to:3},
    {from:2, to:3},
    {from:2, to:0}
];

var stack = [];

function FindAllPaths(u, dest) {
    stack.push(u);
    if(u === dest)
    {
        console.log(stack.join('->'));
    }
    else
    {
        for(i in edges) {
            var edge = edges[i];
            if (edge.from == u && stack.indexOf(edge.to) < 0) {
                FindAllPaths(edge.to, dest);
            }
        }
    }
    stack.pop();
}

FindAllPaths(0, 3);
var边=[
{从:0到:0},
{从:0到:1},
{从:0到:2},
{从:1到:3},
{从:2到:3},
{从:2到:0}
];
var堆栈=[];
函数findAllPath(u,dest){
堆栈推送(u);
如果(u==dest)
{
console.log(stack.join('->');
}
其他的
{
用于(边缘中的i){
var edge=边[i];
if(edge.from==u&&stack.indexOf(edge.to)<0){
FindAllPaths(edge.to,dest);
}
}
}
stack.pop();
}
FindAllPaths(0,3);

你也可以发布你的实际代码吗?是的,但是这个算法正确吗?是的,我想是的。你所说的
进入无限循环并打印路径是什么意思?
它是一个正确的路径,但进入一个循环并打印该路径。你的
对于与u相邻且现在不在堆栈中的每个v可能无法正确实现。听起来循环正在无限次地访问同一个
v