Dijkstra算法是一種常見的最短路徑算法,它通過遍歷網絡中的節點和邊幅度,來獲取圖中任意兩個節點間的最短距離。在實際開發中,我們通常使用PHP來實現Dijkstra算法,因為PHP語言簡單易懂,而且在web開發中應用廣泛。
首先,讓我們看一個簡單的例子:假設我們有一個地圖,其中包含了若干個城市和它們之間的距離, 我們現在需要計算從其中一個城市到另一個城市的最短距離。
代碼實現如下:
array( 'shanghai' =>1064, 'tianjin' =>119, 'wuhan' =>1258 ), 'shanghai' =>array( 'beijing' =>1064, 'guangzhou' =>1376, 'wuhan' =>839 ), 'tianjin' =>array( 'beijing' =>119, 'shijiazhuang' =>283 ), 'guangzhou' =>array( 'shanghai' =>1376, 'wuhan' =>1029 ), 'wuhan' =>array( 'beijing' =>1258, 'shanghai' =>839, 'guangzhou' =>1029, 'shenzhen' =>1142 ), 'shenzhen' =>array( 'wuhan' =>1142, 'hongkong' =>30 ), 'hongkong' =>array( 'shanghai' =>1928, 'shenzhen' =>30 ) ); //定義函數 function dijkstra($start, $end, $cityList){ $nodeInQueue = array_keys($cityList); $distances = array(); //初始化城市的距離矩陣 foreach($cityList as $fromCity =>$item){ foreach($item as $toCity =>$distance){ $distances[$fromCity][$toCity] = $distance; } } //存儲城市的路徑 $path = array(); //初始化城市的距離 $visited = array($start =>0); $predecessor = array(); //初始化城市的優先隊列 while(count($nodeInQueue) >0){ $lowestDistanceNode = null; //獲取當前最短的節點 foreach($nodeInQueue as $node){ if(isset($visited[$node])){ if($lowestDistanceNode === null){ $lowestDistanceNode = $node; }elseif($visited[$node]< $visited[$lowestDistanceNode]){ $lowestDistanceNode = $node; } } } //如果找到最短的節點 if($lowestDistanceNode === $end){ $pathList = array(); $node = $end; while($node !== $start){ array_unshift($pathList, $node); $node = $predecessor[$node]; } array_unshift($pathList, $start); //返回從起點到終點的路徑 return array($visited[$end], $pathList); } //從隊列中移除最短的節點 unset($nodeInQueue[array_search($lowestDistanceNode, $nodeInQueue)]); //遍歷與最短節點相鄰的節點 foreach($distances[$lowestDistanceNode] as $neighbor =>$distance){ if(!isset($visited[$neighbor]) || $visited[$neighbor] >($visited[$lowestDistanceNode] + $distance)){ $visited[$neighbor] = $visited[$lowestDistanceNode] + $distance; $predecessor[$neighbor] = $lowestDistanceNode; } } } return false; } //輸出最短路徑 $result = dijkstra('beijing', 'shenzhen', $cityList); echo '從北京到深圳的距離是:' . $result[0] . '千米,路徑是:'; foreach($result[1] as $key =>$value){ echo $value; if($key !== (count($result[1]) - 1)){ echo '=>'; } } ?>在上面的例子中,我們使用了一個城市列表$cityList來存儲各個城市之間的距離。然后,我們定義了一個dijkstra函數來實現Dijkstra最短路算法。接著,我們調用dijkstra函數,并傳遞起點城市和終點城市的名稱作為參數,來計算這兩個城市之間的最短距離和路徑。最后,輸出計算結果。 通過上述方式,我們可以輕松的使用php來實現Dijkstra算法,實現了最短路徑的計算和解決。