迪傑斯特拉演算法的思想就是從源節點開始處理,每次從未處理的節點中選取與已經處理節點距離最短的節點作為下乙個待處理節點。選取完待處理節點之後,更新從源點經由待處理節點到其鄰接節點的距離,然後選取更新的距離中的最小值對應的節點作為下乙個待處理節點,這樣就開始了下一輪處理。
處理的物件是節點
其過程如下:
1、初始化,令v=,u=,d為記錄從源節點到各點的最短距離,初始時設為無窮大,但到s0的距離設為0,並更新s0的鄰接點到s0的距離
2、從u中選取距離到源點s0距離最短的點加入到v中,並更新其鄰接點到s0的距離
3、重複第二步直到u為空集
python**實現如下
import numpy as np
def dijk(adjacent_array, source_node):
weight = adjacent_array
node_num = len(weight[0])
# path是記錄相應索引值對應的節點的前驅,索引為0的只是為了佔位。例如path[1]對應的值是節點1的最短前驅
path = [i for i in range(1+node_num)]
# distance記錄了源節點到當前節點索引的距離如distance[3]表示的源節點到節點4的距離
distance = [float("inf") for i in range(node_num)]
distance[source_node-1] = 0
mark = source_node
# visited is a list of nodes
visited =
while len(visited)!=node_num:
temp = float("inf")
next_mark = mark
# 根據當前mark節點的鄰接點到源點的距離,選擇最小的作為下乙個mark節點
for i in range(node_num):
# 這裡的i是節點索引,也即節點序號減一
if distance[i]結果如下
the path to 1 is:
with cost:0.000000
[1, 1]
the path to 2 is:
with cost:1.000000
[1, 2]
the path to 3 is:
with cost:1.000000
[1, 3]
the path to 4 is:
with cost:0.500000
[1, 4]
the path to 5 is:
with cost:1.500000
[1, 4, 5]
the path to 6 is:
with cost:2.000000
[1, 3, 6]
[0, 1.0, 1.0, 0.5, 1.5, 2.0]
Dijkstra最短路徑演算法
基本思路是 選擇出發點相鄰的所有節點中,權最小的乙個,將它的路徑設定為確定。其他節點的路徑需要儲存起來。然後從剛剛確認的那個節點的相鄰節點,算得那些節點的路徑長。然後從所有未確定的節點中選擇乙個路徑最短的設定為確定。重複上面步驟即可。void dijkstra graph g,string v fl...
Dijkstra最短路徑演算法
引入 dijkstra 迪傑斯特拉 演算法是典型的最短路徑路由演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。package dijkstra p...
最短路徑 Dijkstra演算法
最短路徑 描述 已知乙個城市的交通路線,經常要求從某一點出發到各地方的最短路徑。例如有如下交通圖 則從a出發到各點的最短路徑分別為 b 0c 10 d 50 e 30 f 60 輸入 輸入只有乙個用例,第一行包括若干個字元,分別表示各頂點的名稱,接下來是乙個非負的整數方陣,方陣維數等於頂點數,其中0...