创建程序以找到最长路径

时间:2010-05-08 20:44:58

标签: php recursion

我对编程很新,我遇到了一些问题。基本上我必须创建一个函数,通过网络图找到所有路径的长度。我已经工作了几个小时,但我似乎无法到达任何地方。使用递归我可以浏览每个路径,但我只是不确定如何记录路径的长度。

非常感谢任何帮助。谢谢!

编辑:更多信息。 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);

1 个答案:

答案 0 :(得分:0)

为什么你需要找出所有可能的路径?你的问题标题说你正在寻找最长的路径,所以这肯定只是最短路径算法的反面,所以Djikstra的算法http://en.wikipedia.org/wiki/Dijkstra's_algorithm或Floyd Warshall http://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm(如alreday所提到的)。