成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

Python:狄克斯特拉算法解析

狄克斯特拉算法是一種廣泛應用于加權(quán)圖的最短路徑計算問題的算法。它適用于有向無環(huán)正權(quán)重的圖,但不適用于負權(quán)重的圖。本文將為您詳細介紹狄克斯特拉算法的實現(xiàn)步驟。1. 畫出權(quán)重圖首先,我們需要畫出一個帶有權(quán)

狄克斯特拉算法是一種廣泛應用于加權(quán)圖的最短路徑計算問題的算法。它適用于有向無環(huán)正權(quán)重的圖,但不適用于負權(quán)重的圖。本文將為您詳細介紹狄克斯特拉算法的實現(xiàn)步驟。

1. 畫出權(quán)重圖

首先,我們需要畫出一個帶有權(quán)重的圖,即各個點之間的距離及方向。使用Python中的networkx和matplotlib庫可以輕松實現(xiàn)這一步驟,代碼如下:

```

import networkx as nx

import as plt

實例化一個空地圖G

G nx.DiGraph()

添加邊

_edge(0, 1, len80)

_edge(1, 2, len50)

_edge(1, 3, len30)

_edge(3, 2, len10)

_edge(2, 4, len20)

_edge(2, 5, len30)

_edge(4, 5, len10)

_edge(5, 3, len5)

_edge(2, 6, len10)

_edge(4, 6, len10)

_edge(3, 6, len25)

_edge(5, 6, len35)

nx.draw(G,with_labelsTrue)

('狄克斯特拉.png', bbox_inches'tight')

```

運行以上代碼,可以得到一個名為“狄克斯特拉”的加權(quán)有向圖。

2. 編寫狄克斯特拉算法函數(shù)

接下來,我們需要編寫一個狄克斯特拉算法的函數(shù)。該函數(shù)的輸入?yún)?shù)為權(quán)重圖、起點和終點,輸出結(jié)果為最短路徑以及對應的距離。以下是函數(shù)的實現(xiàn)代碼:

```

def Dijkstra(G, start, end):

dist {} 記錄各點到起點的距離

previous {} 記錄前驅(qū)節(jié)點

for v in ():

將所有節(jié)點的距離初始化為無窮大

dist[v] float('inf')

previous[v] 'none'

dist[start] 0

u start

while u ! end:

獲取當前距離起點最近的節(jié)點

u min(dist, key)

dist_u dist[u]

del dist[u]

for u, v in G.edges(u):

if v in dist:

計算經(jīng)過u到達v的長度

alt dist_u G[u][v]['len']

if alt < dist[v]:

dist[v] alt

previous[v] u

print('The shortest path is ' str(alt))

path (end,)

last end

while last ! start:

nxt previous[last]

path (nxt,) 元組相加

last nxt

return path

```

在上面的函數(shù)中,我們先將所有節(jié)點的距離初始化為無窮大,然后選取起點開始遍歷圖,尋找距離其最近的節(jié)點,并更新與它相鄰的節(jié)點的距離。遍歷結(jié)束后,我們可以根據(jù)previous數(shù)據(jù)結(jié)構(gòu)獲取最短路徑。

3. 計算最短路徑

比如,如果我們想要算出從0到6的最短距離及路徑,只需調(diào)用上述函數(shù)并傳入?yún)?shù)即可,代碼如下:

```

rs reversed(Dijkstra(G, 0, 6))

print(tuple(rs))

```

運行以上代碼,可以得到以下結(jié)果:

```

The shortest path is 30

The shortest path is 80

The shortest path is 60

The shortest path is 40

The shortest path is 50

The shortest path is 55

(6, 2, 3, 1, 0)

```

因此,從0到6的最短路徑為(6, 2, 3, 1, 0),距離為55。

總結(jié)

本文為您詳細介紹了狄克斯特拉算法的實現(xiàn)步驟。通過畫出權(quán)重圖、編寫算法函數(shù)以及計算最短路徑,我們可以快速便捷地解決加權(quán)圖的最短路徑計算問題。

標簽: