Uzun yolu bulmak için bir program oluşturma

2 Cevap php

Ben programlama için oldukça yeni ve ben bir kaç sorun yaşıyorum. Temelde bir ağ diyagramı ile tüm yolların uzunlukları bulabilirsiniz bir işlevi yapmak zorunda. Saatlerce bu üzerinde çalışıyoruz ama bir yere almak gibi olamaz. Özyineleme kullanarak her yolu gezinebilirsiniz ama ben yolların uzunlukları kayıt nasıl olarak sadece emin değilim.

Herhangi bir yardım büyük mutluluk duyacağız. Teşekkürler!

Düzenleme: Daha detaylı bilgi. Bağımlılıklar dizi ağ üzerindeki her yolu için bağımlılıkları olduğunu. Bu yüzden yol altı yolları 4 ve 2 ile bağlantılı, yol 5 süreler her yol alır kez vb yol 3, kaplı olduğu için, bu yol 6 yol 5 9 saat vb alır olur, 10 saat sürer

Yolları hiçbir bağımlılıkları ile 1,2 ve 3 başlangıç ​​noktasından genişletmek ve tüm bağlı olmayan yolları 5 ve 6 bir bitiş noktasına yaklaşmaktadır. Yani bitirmek için baştan tüm yollarının süreleri bulmak zorunda. Şimdiye kadar geçtiniz yaklaşım başlangıç ​​noktası ve bu noktada benim kod ben sadece sorun ayrı ayrı tüm süreleri kaydetmek için nasıl sergiyi bir sürü yaşıyorum, tüm yollar bulabilirsiniz uç noktadan gitmek olduğunu. Teşekkürler.

$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);

2 Cevap

The usual method for doing that is the Floyd-Warshall algorithm. O Strike, ben yazıyı dikkatli okumadım. Eğer çözmek için çalışıyoruz ne sorun daha açık tanımlamak misiniz?

Neden akla gelebilecek her yolu çalışmak gerekiyor? Sizin soru başlığı uzun yolu arıyoruz diyor, bu yüzden kesinlikle bu, sadece bir kısa yol algoritması tersidir yani Djikstra Algoritması http://en.wikipedia.org/wiki/Dijkstra 's_algorithm veya Floyd Warshall http://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm (as alreday) bahsetti.