当前位置: 首页 > 图灵资讯 > 行业资讯> python最短路径问题的介绍

python最短路径问题的介绍

来源:图灵python
时间: 2024-06-30 20:38:14

说明

1、图论研究中的经典算法问题是最短路径,用于计算从一个顶点到另一个顶点的最短路径。

2、有几种形式的最短路径问题:确定起点的最短路径,确定终点的最短路径,确定起点和终点的最短路径,以及整体最短路径。

路径长度是将每个顶点到相邻顶点的长度记录为1,而不是两个顶点之间的道路距离——两个顶点之间的道路距离是连接边缘的权利。

实例

deffindMin(row):
minL=max(row)
foriinrow:
ifi!=-1andminL>i:
minL=i
returnminL
definitRow(row,plus):
r=[]
foriinrow:
ifi!=-1:
i+=plus
r.append(i)
returnr

defgetMinLen(table,e,t):
count=len(table)-1
startPoint=1
#从原点到每个点最短距离的初始值为-1,即不可达
lenRecord=list(-1forinrange(count+1)))
lenRecord[startPoint]=0
#记录每个循环的起点
points=[startPoint]
#得到最短距离的点
visited=set()
whilelen(points)>0:
#当前起点
curPoint=points.pop()
#从原点到当前起点的距离
curLen=lenRecord[curPoint]
#从当前起点到各点的距离
curList=initRow(table[curPoint],t)
#从当前起点到每个点的最短距离
curMin=findMin(curList)
visited.add(curPoint)
idx=0
whileidx<count:
idx+=1
#如果当前点无法达到或达到当前点的最短距离已经计算出,则跳过
ifcurList[idx]==-idxinviisited:
continue
#最接近当前起点的记录点作为下一个外部循环的起点
ifcurList[idx]==curMin:
points.append(idx)
#如果从原点到目标点idx的距离较短,则更新
iflenRecord[idx]==-1orenRecord[idx]>(curLen+curList[idx]):
lenRecord[idx]=curLen+curList[idx]
returnlenRecord[e]

defprocessInput():
pointCnt,roadCnt,jobCnt=(int(x)forxinraw_input().split())
table=[]
foriinrange(pointCnt+1):
table.append([-1]*(pointCnt+1))
foriinrange(roadCnt):
(x,y,w)=(int(n)forninraw_input().split())
iftable[x][y]==-1ortable[x][y]>w:
table[x][y]=w
table[y][x]=w
res=[]
foriinrange(jobCnt):
e,t=(int(x)forxinraw_input().split())
res.append(getMinLen(table,e,t))
foriinres:
print(i)

processInput()

以上是python最短路径问题的介绍,希望对大家有所帮助。更多Python学习指导:python基础教程

本文教程操作环境:windows7系统Python 3.9.1,DELL G3电脑。