基于Python實(shí)現(xiàn)迪杰斯特拉和弗洛伊德算法
圖搜索之基于Python的迪杰斯特拉算法和弗洛伊德算法,供大家參考,具體內(nèi)容如下
Djstela算法
#encoding=UTF-8
MAX=9
'''
Created on 2016年9月28日
@author: sx
'''
b=999
G=[[0,1,5,b,b,b,b,b,b],\
[1,0,3,7,5,b,b,b,b],\
[5,3,0,b,1,7,b,b,b],\
[b,7,b,0,2,b,3,b,b],\
[b,5,1,2,0,3,6,9,b],\
[b,b,7,b,3,0,b,5,b],\
[b,b,b,3,6,b,0,2,7],\
[b,b,b,b,9,5,2,0,4],\
[b,b,b,b,b,b,7,4,0]]
P=[]
D=[]
def Djstela(G,P,D):
final=[]
for i in range(0,len(G)):
final.append(0)
D.append(G[0][i])
P.append(0)
D[0]=0
final[0]=1
k=0
for v in range(1,len(G)):
min=999
for w in range(0,len(G)):
if final[w]==0 and D[w]<min:
k=w
min=D[w]
final[k]=1
for t in range(0,len(G)):
if min+G[k][t]<D[t]:
D[t]=min+G[k][t]
P[t]=k
print("\n最短路徑\n",D,"\n","\n前一個(gè)選擇\n",P)
def search(x):
print("選擇的終點(diǎn)",x,"最短路徑",D[x])
print("鄰接矩陣\n")
for i in range(0,9):
print(G[i])
Djstela(G, P, D)
q=input("\n請(qǐng)輸入終點(diǎn)")
search(int(q))
FLOYD算法
#encoding=UTF-8
'''
Created on 2016年9月28日
@author: sx
'''
t=0
b=999
G=[[0,1,5,b,b,b,b,b,b],\
[1,0,3,7,5,b,b,b,b],\
[5,3,0,b,1,7,b,b,b],\
[b,7,b,0,2,b,3,b,b],\
[b,5,1,2,0,3,6,9,b],\
[b,b,7,b,3,0,b,5,b],\
[b,b,b,3,6,b,0,2,7],\
[b,b,b,b,9,5,2,0,4],\
[b,b,b,b,b,b,7,4,0]]
P=[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],\
[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],\
[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]]
D=[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],\
[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],\
[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]]
def Floyd(G,P,D):
t=0
for u in range(0,len(G)):
for s in range(0,len(G)):
D[u][s]=G[u][s]
P[u][s]=s
for k in range(0,len(G)):
for v in range(0,len(G)):
for w in range(0,len(G)):
if D[v][w]>D[v][k]+D[k][w]:
t=t+1
D[v][w]=D[v][k]+D[k][w]
P[v][w]=P[v][k]
Floyd(G, P, D)
def search(s,u):
lenth=D[s][u]
print("路徑長(zhǎng)度為",lenth)
f=P[s][u]
foot=[s,f]
if f==u:
print("無(wú)需規(guī)劃,0步")
while f!=u:
f=P[f][u]
foot.append(f)
for i in range(0,len(foot)):
if i==0:
print("起 點(diǎn)____",foot[i])
elif i==len(foot)-1:
print("終 點(diǎn)____",foot[i],"步長(zhǎng)___",G[foot[i-1]][foot[i]])
else:
print("第",i,"點(diǎn)____",foot[i],"步長(zhǎng)___",G[foot[i-1]][foot[i]])
print("鄰接矩陣")
for i in range(0,9):
print(G[i])
s=input("請(qǐng)輸入起點(diǎn)0-8\n")
u=input("請(qǐng)輸入終點(diǎn)0-8\n")
Floyd(G, P, D)
search(int(s),int(u))
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)現(xiàn)可以斷點(diǎn)續(xù)傳和并發(fā)的ftp程序
斷點(diǎn)續(xù)傳和并發(fā)是現(xiàn)在很多ftp程序都支持的功能,如果我們用python如何來(lái)做斷點(diǎn)續(xù)傳和并發(fā)了,今天來(lái)看一篇python實(shí)現(xiàn)斷點(diǎn)續(xù)傳和并發(fā)的ftp程序例子吧,具體如下。2016-09-09
python標(biāo)準(zhǔn)日志模塊logging的使用方法
python的標(biāo)準(zhǔn)庫(kù)里的日志系統(tǒng)從Python2.3開(kāi)始支持。只要import logging這個(gè)模塊即可使用。2013-11-11
python自動(dòng)獲取微信公眾號(hào)最新文章的實(shí)現(xiàn)代碼
這篇文章主要介紹了python自動(dòng)獲取微信公眾號(hào)最新文章,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
python排序算法的簡(jiǎn)單實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于python排序算法的簡(jiǎn)單實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
wxPython事件驅(qū)動(dòng)實(shí)例詳解
這篇文章主要介紹了wxPython事件驅(qū)動(dòng)機(jī)制,以一個(gè)獲取當(dāng)前位置信息的實(shí)例形式講述了wxPython事件驅(qū)動(dòng)機(jī)制及其相關(guān)函數(shù)的用法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-09-09
如何使用Cython對(duì)python代碼進(jìn)行加密
這篇文章主要介紹了如何使用Cython對(duì)python代碼進(jìn)行加密,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
python matplotlib坐標(biāo)軸設(shè)置的方法
本篇文章主要介紹了python matplotlib坐標(biāo)軸設(shè)置的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12

