dijkstra算法python实现

from queue import Queue,LifoQueue,PriorityQueue

n,m,s,t=map(int,input().split())#分开读入n,m,s,t类似于scanf
Weights=[[100000000 for i in range(n+1)] for j in range(n+1)]
sweight=[0 for i in range(n+1)]
sfound=[0 for i in range(n+1)]
spath=[s for i in range(n+1)]
sout=[s for i in range(n+1)]
def Dijstra(s,t):
    for i in range(1,n+1):
        sweight[i]=Weights[s][i]
        spath[i]=s
        sfound[i]=0
    for i in range(1,n+1):
        minweight=100000000
        for j in range(1,n+1):
            if(sfound[j]==0 and sweight[j]<minweight):
                v=j
                minweight=sweight[j]
        sfound[v]=1
        if(v==t):
            return
        for j in range(1,n+1):
            if(sfound[j]==0 and minweight+Weights[v][j]<sweight[j]):
               sweight[j]=minweight+Weights[v][j]
               spath[j]=v

for i in range(1,m+1):
    a,b,c=map(int,input().split())
    Weights[a][b]=c
Dijstra(s,t)

j=0
sum=sweight[t]
sout[j]=t
i=spath[t]
j+=1
while i!=s:
    sout[j]=i
    i=spath[i]
    j+=1
sout[j]=s
l=j+1

for i in range(0,j+1):
    print(sout[l-i-1],end=' ')
print()
print(sum)

 

posted @ 2020-12-09 15:37  Eunice呀  阅读(265)  评论(0)    收藏  举报