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
。