求最短路径问题,最短路径问题定义
说明
1.最短路径问题是图论研究中的经典算法问题,用于计算从一个顶点到另一个顶点的最短路径。
2.最短路径问题有几种形式:确定起点的最短路径,确定终点的最短路径,确定起点和终点的最短路径,全局最短路径问题。
路径是指每个顶点到相邻顶点的长度为1,而不是两个顶点之间的道路距离——。两个顶点之间的道路距离就是连接边的右边。
实例
deffindMin(世界其他地区):
最小=最大(世界其他地区)
对于第:行
ifi!=-1和minLi:
minL=i
returnminL
definitRow(row,plus):
r=[]
对于第:行
ifi!=-1:
I=正
r .追加(I)
返回者
defgetMinLen(表,e,t):
count=len(table)-1
起点=1
#记录原点到各点的最短距离初始值为-1,即不可达。
lenRecord=list((-1 for iinrange(count 1)))
lenRecord[startPoint]=0
#记录每个周期的起点
点数=[起点]
#获得最短距离的点
visited=set()
whilelen(点数)0:
#当前起点
curPoint=points.pop()
#从原点到当前原点的距离
curLen=lenRecord[curPoint]
#从当前起点到每个点的距离
铌
sp;curList=initRow(table[curPoint],t)
#当前起点到各点的最短距离
curMin=findMin(curList)
visited.add(curPoint)
idx=0
whileidx<count:
idx+=1
#当前点不可达或到当前点的最短距离已计算出则跳过
ifcurList[idx]==-1oridxinvisited:
continue
#记录距离当前起点最近的点作为下次外层循环的起点
ifcurList[idx]==curMin:
points.append(idx)
#如果从原点经当前起点curPoint到目标点idx的距离更短,则更新
iflenRecord[idx]==-1orlenRecord[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电脑。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。