Python实现迪杰斯特拉算法并生成最短路径的示例代码

作者:会武术之白猫 时间:2023-06-05 21:50:10 


def Dijkstra(network,s,d):#迪杰斯特拉算法算s-d的最短路径,并返回该路径和代价
 print("Start Dijstra Path……")
 path=[]#s-d的最短路径
 n=len(network)#邻接矩阵维度,即节点个数
 fmax=999
 w=[[0 for i in range(n)]for j in range(n)]#邻接矩阵转化成维度矩阵,即0→max
 book=[0 for i in range(n)]#是否已经是最小的标记列表
 dis=[fmax for i in range(n)]#s到其他节点的最小距离
 book[s-1]=1#节点编号从1开始,列表序号从0开始
 midpath=[-1 for i in range(n)]#上一跳列表
 for i in range(n):
   for j in range(n):
     if network[i][j]!=0:
       w[i][j]=network[i][j]#0→max
     else:
       w[i][j]=fmax
     if i==s-1 and network[i][j]!=0:#直连的节点最小距离就是network[i][j]
       dis[j]=network[i][j]
 for i in range(n-1):#n-1次遍历,除了s节点
   min=fmax
   for j in range(n):
     if book[j]==0 and dis[j]<min:#如果未遍历且距离最小
       min=dis[j]
       u=j
   book[u]=1
   for v in range(n):#u直连的节点遍历一遍
     if dis[v]>dis[u]+w[u][v]:
       dis[v]=dis[u]+w[u][v]
       midpath[v]=u+1#上一跳更新
 j=d-1#j是序号
 path.append(d)#因为存储的是上一跳,所以先加入目的节点d,最后倒置
 while(midpath[j]!=-1):
   path.append(midpath[j])
   j=midpath[j]-1
 path.append(s)
 path.reverse()#倒置列表
 print(path)
 #print(midpath)
 print(dis)
 #return path

network=[[0,1,0,2,0,0],
    [1,0,2,4,3,0],
    [0,2,0,0,1,4],
    [2,4,0,0,6,0],
    [0,3,1,6,0,2],
    [0,0,4,0,2,0]]
Dijkstra(network,1,6)

来源:https://www.cnblogs.com/ljy1227476113/p/11720119.html

标签:Python,迪杰斯特拉算法
0
投稿

猜你喜欢

  • MySQL最常见的操作语句小结

    2023-12-27 19:33:56
  • python pygame 愤怒的小鸟游戏示例代码

    2023-11-14 17:00:48
  • python 实现批量替换文本中的某部分内容

    2021-05-19 18:06:42
  • vuejs使用axios异步访问时用get和post的实例讲解

    2024-05-02 16:56:49
  • jquery+ajax+C#实现无刷新操作数据库数据的简单实例

    2024-01-15 03:26:34
  • 浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别

    2023-09-09 23:41:04
  • [组图]手把手教你制作ASP留言本

    2007-09-22 09:32:00
  • Vue2.0在IE11版本浏览器中的兼容性问题

    2024-04-29 13:08:55
  • Oracle删除字段中的空格、回车及指定字符的实例代码

    2024-01-18 18:10:07
  • Python爬虫框架Scrapy安装使用步骤

    2022-02-23 13:49:09
  • 用Python实现斐波那契(Fibonacci)函数

    2023-06-29 19:59:07
  • SQL Server 2005数据库中表的递归查询

    2009-01-08 16:08:00
  • Python制作豆瓣图片的爬虫

    2021-11-24 05:53:05
  • Pyqt清空某一个QTreeewidgetItem下的所有分支方法

    2022-01-24 10:29:46
  • 在layui下对元素进行事件绑定的实例

    2024-04-22 22:17:27
  • 教你用Type Hint提高Python程序开发效率

    2023-10-21 03:42:24
  • 教你用Python写一个植物大战僵尸小游戏

    2021-07-19 22:59:37
  • Mysql中悲观锁与乐观锁应用介绍

    2024-01-15 08:26:30
  • 基于Tensorflow使用CPU而不用GPU问题的解决

    2022-01-01 22:53:08
  • python3.8下载及安装步骤详解

    2023-11-19 18:47:02
  • asp之家 网络编程 m.aspxhome.com