欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

dijkstra php實現

榮姿康1年前7瀏覽0評論
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算法,實現了最短路徑的計算和解決。