python編寫的最短路徑算法

本文給大家分享的是python 無向圖最短路徑算法:請各位大大指教,繼續改進。(修改了中文字符串,使py2exe中文沒煩惱),需要的朋友可以參考下

python編寫的最短路徑算法

一心想學習算法,很少去真正靜下心來去研究,前幾天趁着週末去了解了最短路徑的資料,用python寫了一個最短路徑算法。算法是基於帶權無向圖去尋找兩個點之間的最短路徑,數據存儲用鄰接矩陣記錄。首先畫出一幅無向圖如下,標出各個節點之間的權值。

python編寫的最短路徑算法 三聯

其中對應索引:

A ——> 0

B——> 1

C——> 2

D——>3

E——> 4

F——> 5

G——> 6

  鄰接矩陣表示無向圖:

算法思想是通過Dijkstra算法結合自身想法實現的.。大致思路是:從起始點開始,搜索周圍的路徑,記錄每個點到起始點的權值存到已標記權值節點字典A,將起始點存入已遍歷列表B,然後再遍歷已標記權值節點字典A,搜索節點周圍的路徑,如果周圍節點存在於表B,比較累加權值,新權值小於已有權值則更新權值和來源節點,否則什麼都不做;如果不存在與表B,則添加節點和權值和來源節點到表A,直到搜索到終點則結束。

這時最短路徑存在於表A中,得到終點的權值和來源路徑,向上遞推到起始點,即可得到最短路徑,下面是代碼:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53