卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

Python:狄克斯特拉算法解析

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

狄克斯特拉算法是一種廣泛應(yīng)用于加權(quán)圖的最短路徑計算問題的算法。它適用于有向無環(huán)正權(quán)重的圖,但不適用于負(fù)權(quán)重的圖。本文將為您詳細(xì)介紹狄克斯特拉算法的實現(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é)果為最短路徑以及對應(yīng)的距離。以下是函數(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:

獲取當(dāng)前距離起點最近的節(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到達(dá)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é)

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

標(biāo)簽: