码迷,mamicode.com
首页 > 编程语言 > 详细

python实现最短路径问题

时间:2018-06-03 21:36:09      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:not   n+1   ret   init   input   return   put   nbsp   inpu   

class shortestpath():
    def __init__(self,x):
        self.n=x
        self.dis=[[float(inf) for i in range(0,x+1)] for j in range(0,x+1)]
        for i in range(0,x+1):
            self.dis[i][i]=0

    def dijkstra(self,s):
        lowdis=[float(inf)]*(self.n+1)
        vis=[False]*(self.n+1)
        vis[s]=True
        for i in range(0,self.n+1):
            lowdis[i]=self.dis[s][i]
        
        for i in range(1,self.n):
            mind=float(inf)
            minn=-1
            for j in range(0,self.n+1):
                if not vis[j]:
                    if lowdis[j]<mind:
                        mind=lowdis[j]
                        minn=j
            if mind<float(inf):
                vis[minn]=True
                for j in range(0,self.n+1):
                    if not vis[j]:
                        if mind+self.dis[minn][j]<lowdis[j]:
                            lowdis[j]=mind+self.dis[minn][j]
            else: return lowdis
        return lowdis

    def floyd(self):
        lowdis=self.dis[:]
        for u in range(0,self.n+1):
            for i in range(0,self.n+1):
                for j in range(0,self.n+1):
                    lowdis[i][j]=min(lowdis[i][u]+lowdis[u][j],lowdis[i][j])
        return lowdis

n,m=map(int,input().split())
d=shortestpath(n)
for i in range(0,m):
    u,v,w=map(int,input().split())
    if d.dis[u][v]>w:
        d.dis[u][v]=w

lowdis=d.floyd()
if lowdis[1][n]!=float(inf):
    print(lowdis[1][n])
else:
    print("-1")

 

python实现最短路径问题

标签:not   n+1   ret   init   input   return   put   nbsp   inpu   

原文地址:https://www.cnblogs.com/TAMING/p/9129995.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!