日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python写算法求最短路径,Python实现迪杰斯特拉算法并生成最短路径的示例代码

發(fā)布時(shí)間:2025/3/15 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python写算法求最短路径,Python实现迪杰斯特拉算法并生成最短路径的示例代码 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

def Dijkstra(network,s,d):#迪杰斯特拉算法算s-d的最短路徑,并返回該路徑和代價(jià)

print("Start Dijstra Path……")

path=[]#s-d的最短路徑

n=len(network)#鄰接矩陣維度,即節(jié)點(diǎn)個(gè)數(shù)

fmax=999

w=[[0 for i in range(n)]for j in range(n)]#鄰接矩陣轉(zhuǎn)化成維度矩陣,即0→max

book=[0 for i in range(n)]#是否已經(jīng)是最小的標(biāo)記列表

dis=[fmax for i in range(n)]#s到其他節(jié)點(diǎn)的最小距離

book[s-1]=1#節(jié)點(diǎn)編號(hào)從1開始,列表序號(hào)從0開始

midpath=[-1 for i in range(n)]#上一跳列表

for i in range(n):

for j in range(n):

if network[i][j]!=0:

w[i][j]=network[i][j]#0→max

else:

w[i][j]=fmax

if i==s-1 and network[i][j]!=0:#直連的節(jié)點(diǎn)最小距離就是network[i][j]

dis[j]=network[i][j]

for i in range(n-1):#n-1次遍歷,除了s節(jié)點(diǎn)

min=fmax

for j in range(n):

if book[j]==0 and dis[j]

min=dis[j]

u=j

book[u]=1

for v in range(n):#u直連的節(jié)點(diǎn)遍歷一遍

if dis[v]>dis[u]+w[u][v]:

dis[v]=dis[u]+w[u][v]

midpath[v]=u+1#上一跳更新

j=d-1#j是序號(hào)

path.append(d)#因?yàn)榇鎯?chǔ)的是上一跳,所以先加入目的節(jié)點(diǎn)d,最后倒置

while(midpath[j]!=-1):

path.append(midpath[j])

j=midpath[j]-1

path.append(s)

path.reverse()#倒置列表

print(path)

#print(midpath)

print(dis)

#return path

network=[[0,1,0,2,0,0],

[1,0,2,4,3,0],

[0,2,0,0,1,4],

[2,4,0,0,6,0],

[0,3,1,6,0,2],

[0,0,4,0,2,0]]

Dijkstra(network,1,6)

以上就是Python實(shí)現(xiàn)迪杰斯特拉算法并生成最短路徑的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Python實(shí)現(xiàn)迪杰斯特拉算法的資料請(qǐng)關(guān)注聚米學(xué)院其它相關(guān)文章!

總結(jié)

以上是生活随笔為你收集整理的python写算法求最短路径,Python实现迪杰斯特拉算法并生成最短路径的示例代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。