这个还有很多概念有点明确

from collections import defaultdict # defaultdict, 找不到的key的value 就设定为 0,https://blog.csdn.net/edogawachia/article/details/104826952

from heapq import * # heapq 优先队列

def dijkstra_raw(edges, from_node, to_node):

g = defaultdict(list)

for l, r, c in edges:

g[l].append((c, r))

q, seen = [(0, from_node, ())], set()

while q:

(cost, v1, path) = heappop(q)

if v1 not in seen:

seen.add(v1)

path = (v1, path)

if v1 == to_node:

return cost, path

for c, v2 in g.get(v1, ()):

if v2 not in seen:

heappush(q, (cost + c, v2, path))

return float("inf"), []

def dijkstra(edges, from_node, to_node):

len_shortest_path = -1

ret_path = []

length, path_queue = dijkstra_raw(edges, from_node, to_node)

if len(path_queue) > 0:

len_shortest_path = length ## 1. 先求长度

## 2. 分解path_queue,以获得最短路径中的传递节点

left = path_queue[0]

ret_path.append(left) ## 2.1 首先记录目标节点;

right = path_queue[1]

while len(right) > 0:

left = right[0]

ret_path.append(left) ## 2.2 记录其他节点,直到源节点。

right = right[1]

ret_path.reverse() ## 3. 最后反转列表,使其成为正常序列。

return len_shortest_path, ret_path

### ====================给一个所有节点的列表

list_nodes_id = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20];

### ==================== 给一个拓扑的常数矩阵.

M = 99999 # 这代表一段很长的距离。这意味着没有联系。

### M_topo是表示拓扑的二维邻接矩阵

M_topo = [

[M, 2.9, 2.5, M, 2, M, 1.8, 3, 1.8, M, M, M, M, M, M, M, M, M, M, M, M], # 0

[2.9, M, 1.3, M, M, 1.7, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M], # 1

[1, 1, M, 1, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M], # 2

[M, M, 1, M, 1, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M], # 3

[1, M, M, 1, M, M, M, M, M, 1, 1, 1, M, M, M, M, M, M, M, M, M], # 4

[M, 1, M, M, M, M, 1, M, M, M, M, M, M, M, M, M, M, M, M, M, M], # 5

[1, M, M, M, M, 1, M, 1, M, M, M, M, M, M, M, M, M, M, M, M, M], # 6

[1, M, M, M, M, M, 1, M, 1, M, M, M, M, M, M, M, M, M, M, M, M], # 7

[1, M, M, M, M, M, M, 1, M, 1, M, M, 1, M, M, M, M, M, M, M, M], # 8

[M, M, M, M, 1, M, M, M, 1, M, M, 1, M, M, M, M, M, M, M, M, M], # 9

[M, M, M, M, 1, M, M, M, M, M, M, 1, M, 1, M, M, M, M, M, M, M], # 10

[M, M, M, M, 1, M, M, M, M, 1, 1, M, M, 1, 1, M, M, M, M, M, M], # 11

[M, M, M, M, M, M, M, M, 1, M, M, M, M, M, 1, M, M, M, M, M, M], # 12

[M, M, M, M, M, M, M, M, M, M, 1, 1, M, M, 1, M, M, 1, 1, M, M], # 13

[M, M, M, M, M, M, M, M, M, M, M, 1, 1, 1, M, 1, 1, M, M, M, M], # 14

[M, M, M, M, M, M, M, M, M, M, M, M, M, M, 1, M, 1, M, 1, 1, M], # 15

[M, M, M, M, M, M, M, M, M, M, M, M, M, M, 1, 1, M, M, M, M, 1], # 16

[M, M, M, M, M, M, M, M, M, M, M, M, M, 1, M, M, M, M, 1, M, M], # 17

[M, M, M, M, M, M, M, M, M, M, M, M, M, 1, M, 1, M, 1, M, 1, M], # 18

[M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, 1, M, M, 1, M, 1], # 19

[M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, 1, M, M, 1, M], # 20

]

### --- 读取拓扑,并生成给定拓扑中的所有边。

edges = []

for i in range(len(M_topo)):

for j in range(len(M_topo[0])):

if i != j and M_topo[i][j] != M:

edges.append((i, j, M_topo[i][j])) ### (i,j) 是一个链接;M_topo[i][j]这里是1,链接的长度(i,j).

'''

start = int(input("请输入起始点:"))

end = int(input("请输入终点:"))

print("=== Dijkstra算法 ===")

print("找从 %s 到 %s的最短路径:" % (start, end))

length, Shortest_path = dijkstra(edges, start, end)

print('长度 = ', length)

print('最短路径是 ', Shortest_path)

'''

# what is edge

python最短路径例子_[python]dijkstra 算法的 加权的最短路径 案例相关推荐

  1. 基于dijsktra算法的最短路径求解_基于dijkstra算法的AGV路径规划(含C++代码)

    文字&代码来源: @Wasabi喵喵喵 基于dijkstra算法的AGV路径规划 dijkstra算法的路径规划 经典Dijkstra算法是一种贪心算法,根据路径长度递增次序找到最短路径,通常 ...

  2. Dijkstra算法求单源最短路径

    1.最短路径 在一个连通图中,从一个顶点到另一个顶点间可能存在多条路径,而每条路径的边数并不一定相同.如果是一个带权图,那么路径长度为路径上各边的权值的总和.两个顶点间路径长度最短的那条路径称为两个顶 ...

  3. python算法之Dijkstra算法(迪杰斯特拉)——最短路径问题

    ##python算法之Dijkstra Dijkstra算法是由荷兰计算机科学家迪杰斯特拉(Dijkstra)于1959 年提出的,因此又叫迪杰斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决 ...

  4. python求最短路径的方法_python --Dijkstra 算法求取最短路径

    #大名鼎鼎的Dijkstra是一种广度优先算法: #!/usr/bin/env python3 # -*- coding: utf-8 -*- import numbers import numpy ...

  5. Python 中的图:Dijkstra 算法

    介绍   图是最有用的数据结构之一.它们可用于对几乎所有事物进行建模--对象关系和网络是最常见的.图像可以表示为网格状的像素图,句子可以表示为单词的图.图表被用于各个领域,从制图到社会心理学,当然它们 ...

  6. python语言例子_第一个Python实例

    1. 第一个Python实例 Python随着时代的进步,变得越来越受欢迎,当然也有它受人喜欢的道理.下面我们首先通过对比来了解一下. 不知道大家有没有学过C或C++,在C语言中输出一个简单的'Hel ...

  7. python思想读后感_数据结构与算法:Python语言描述读后感1000字

    <数据结构与算法:Python语言描述>是一本由裘宗燕著作,机械工业出版社出版的平装图书,本书定价:CNY 45.00,页数:343,特精心从网络上整理的一些读者的读后感,希望对大家能有帮 ...

  8. Dijkstra算法求解图中最短路径距离

    前言:这里是自学内容,讲解的是用python来实现Dijkstra算法,算是入门求解图中最短路径问题的典型案例. 算法简介: 迪杰斯特拉(Dijkstra)算法是一个按照路径长度递增的次序产生的最短路 ...

  9. Dijkstra 算法——计算有权最短路径(边有权值)

    [0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在理解 Dijkstra 的思想并用源代码加以实现: 0.2)最短路径算法的基础知识,参见 http://blog. ...

最新文章

  1. snmpd服务无法更改默认端口
  2. android中进度条的使用,android的进度条使用
  3. linux网络编程之通信协议格式
  4. 解读Tom介绍的Oracle Database 12c的12个新特性
  5. 万字教你如何用 Python 实现线性规划
  6. Apache Mail 发送带附件的邮件
  7. 巨杉数据库 v5.0 Beta 正式发布!
  8. android 日历_适用于Android的十大最佳日历应用
  9. 特别实用的几种SQL语句送给大家,让你的SQL高大上!
  10. [2018.03.13 T2] 过河(river)
  11. linux安装gcc等程序包,Linux手动安装gcc-8.3.0
  12. 网络地址和广播地址的快速计算方法
  13. kettle org.pentaho.ui.xul.XulException: java.lang.reflect.InvocationTargetException
  14. android 陀螺仪传感器性能损耗,传感器专题(3)——加速度/陀螺仪传感器
  15. 宠物卡牌大赛奖励发放结束公告
  16. 视频动作识别调研(Action Recognition)
  17. Ubuntu的以太网卡找不到解决方法
  18. prism 计算 Spearman相关
  19. 小学计算机课教学设计加教学反思,小学信息技术优秀教学反思
  20. Springboot+vue项目零食销售商城

热门文章

  1. 什么是网关,网关的作用
  2. js判断操作系统与浏览器
  3. 生产过程代码分析(二)--估计
  4. 低代码开发,未来已来
  5. Android/Linux之procrank查内存工具
  6. Ubuntu各个版本国内源
  7. git创建分支合并到master分支步骤
  8. TensorFlow工具及笔记
  9. android中FileObserver的运用
  10. android 源码打patch