我对编程很新,我遇到了一些问题。基本上我必须创建一个函数,通过网络图找到所有路径的长度。我已经工作了几个小时,但我似乎无法到达任何地方。使用递归我可以浏览每个路径,但我只是不确定如何记录路径的长度。
非常感谢任何帮助。谢谢!
编辑:更多信息。 dependencies数组是网络上每个路径的依赖项。因此路径6链接到路径4和2,路径5连接到路径3,等等。持续时间是每个路径所花费的时间,因此路径6需要10小时,路径5需要9小时等等。
没有依赖关系的路径1,2和3从起始点扩展,并且不依赖于全部的路径5和6收敛到终点。所以我必须找到从开始到结束的所有途径的持续时间。到目前为止我采用的方法是从终点到起点,此时我的代码可以找到所有的路径,我在解决如何分别记录所有持续时间时遇到了很多麻烦。感谢。
$dependencies = array("","","","1","3","4,2");
$durations = array("5","3","4","11","9","10");
function tracePath($path,$dependencies,$durations,$returnArray=array()) {
if($dependencies[$path] != "") {
$currentTaskDependencies = preg_split("/[\s]*[,][\s]*/", $dependencies[$path]);
for($i=0;$i<count($currentTaskDependencies);$i++) {
tracePath($currentTaskDependencies[$i]-1,$dependencies,$durations,$returnArray[$i]);
}
}
return $returnArray;
}
tracePath(6,$dependencies,$durations);
答案 0 :(得分:0)
为什么你需要找出所有可能的路径?你的问题标题说你正在寻找最长的路径,所以这肯定只是最短路径算法的反面,所以Djikstra的算法http://en.wikipedia.org/wiki/Dijkstra's_algorithm或Floyd Warshall http://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm(如alreday所提到的)。