Dijkstra演算法python實現

2021-10-02 20:58:17 字數 1565 閱讀 8997

這位大哥真厲害,**講解dijkstra

根據他的講解,python實現如下

import math

class

graph

:def

__init__

(self,vexs,matrix)

: self.vexs = vexs

self.vexnum =

len(self.vexs)

self.matrix = matrix

class

shortestpath

:def

dijstra

(self,v,g:graph)

:#頂點個數

n = g.vexnum

#是否已處理

flag =[0

for i in

range

(g.vexnum)

]#路徑陣列

pre =[0

for i in

range

(g.vexnum)

]#距離

dist = g.matrix[v]

flag[v]=1

dist[v]=0

""" 開始n-1次迴圈

1. 找dist中未訪問的最小點k

2. 更新經過k點的最短路徑

"""for i in

range(1

,n):

_min = math.inf

# 1. 找dist中未訪問的最小點k

for j in

range

(n):

## 未訪問且最小的點k

ifnot flag[j]

and dist[j]

< _min:

_min = dist[j]

k = j

## 將k標記為已訪問

flag[k]=1

# 更新經過k點的最短路徑

for j in

range

(n):

#未訪問且經過k點的話dist會減小

ifnot flag[j]

and g.matrix[k]

[j]+ _min < dist[j]

:#更新到j的距離為到k的距離+k到j的距離

dist[j]

= g.matrix[k]

[j]+ _min

pre[j]

= k return pre, dist

vexs =[0

,1,2

,3]matrix =[[

0,2,

1,5]

,[2,

0,math.inf,1]

,[1,math.inf,0,

5],[

5,1,

5,0]

]g = graph(vexs,matrix)

s = shortestpath(

)pre, dist = s.dijstra(

2,g)

print

(pre,dist)

演算法 Dijkstra演算法筆記

參考文章 隨記參考邏輯 dijkstra演算法採用的是一種貪心的策略。演算法的基本思想是 通過不斷更新的距離陣列,每次從距離陣列找到離源點最近的乙個且沒有掃瞄過的節點,然後以該頂點為中心進行bfs擴充套件,直到所有節點都掃瞄一遍,最終得到源點到其餘所有點的最短路徑 1 起點固定,若要記錄到達路徑,則...

日日演算法 Dijkstra演算法

dijistra演算法作為一種最短路徑演算法,可以用來計算乙個節點到圖上其他節點的最短距離。主要是通過啟發式的思想,由中心節點層層向外拓展,直到找到中點。適用於無向圖和有向圖。假設我們要計算節點a到其它節點的最短距離 引入兩個集合 s,u 其中集合s表示已經求出最短路徑的點 以及最短距離 集合u表示...

(二)Dijkstra演算法

ifndef dijkstra define dijkstra include using namespace std void testdijstra const int max node 1000 最簡單的 用二維陣列來記錄graph和weight 斐波那契堆實現 insert,get 1.最普...