求最短路径问题,最短路径问题定义

  求最短路径问题,最短路径问题定义

  说明

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: