【发布时间】:2014-04-02 14:33:59
【问题描述】:
我有一个有向图,其中路径存储在 JSON 数组中。它是源和目标的形式。
Var pathDirection = [{"Source":2,"Destination":3},
{"Source":3,"Destination":4},
{"Source":5,"Destination":4},
{"Source":2,"Destination":5},
{"Source":4,"Destination":6}];
在上面使用它可以形成如下结构的图形。
我的问题是我不知道起点,我必须找到从任何节点到达 6 的所有可能路径
像上图一样,到达 6 的不同路径是
输出:
[4 ->6]
[3->4 ->6]
[5->4 ->6]
[2->5->4 ->6]
[2->3->4 ->6]
我尝试使用回溯在下面编写算法,这工作正常,但正在寻找一些最佳算法。请提出任何其他可能的方法来做同样的事情以及我如何在下面的程序中进行优化。
// BackTrack From End Node Destination 6
var getAllSource = function(destId){
var sourceForsameDist = [];
pathDirection.forEach(function(eachDirection){
if(eachDirection.Destination == destId){
sourceForsameDist.push(eachDirection.Source);
}
});
return sourceForsameDist;
};
var diffPath = [];
var init = function(destination){
var sourceId = getAllSource(destination[destination.length - 1]);
if(sourceId.length === 0){
diffPath.push(destination);
}
for(var i=0;i<sourceId.length;i++){
var copy = destination.slice(0);
copy.push(sourceId[i]);
init(copy);
}
};
init([6]);
console.log(diffPath); // [[6,4,3,2],[6,4,5,2]]
【问题讨论】:
-
使用 DFS 或 BFS 从您的目标节点向后搜索(好像边缘在相反方向)。
-
图形可以包含圆圈吗?那么结果应该是一个无限列表吗?
-
@Bergi 想要通过图表说什么包含圆圈?对不起,基本问题。
-
是否是DAG。你的例子是一个,我想知道是否每个可能的输入都是一个。
-
@Bergi 它永远不会是循环的,也不会循环回到同一个节点
标签: javascript algorithm data-structures graph-algorithm directed-graph