python实现最短路径问题

Posted taming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python实现最短路径问题相关的知识,希望对你有一定的参考价值。

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实现最短路径问题的主要内容,如果未能解决你的问题,请参考以下文章

Python描述数据结构之最短路径篇

python实现 多叉树 寻找最短路径

教你一招 | Python实现无向图最短路径

python 实现dijkstra算法求解最短路径

揽货最短路径解决方案算法 - V2(增加了时间维度-客户允许的服务时间段,C#/JAVA同步实现,带python作图)

Floyd-Warshall 算法:获得最短路径