python最短路径例子_[python]dijkstra 算法的 加权的最短路径 案例
这个还有很多概念有点明确
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 算法的 加权的最短路径 案例相关推荐
- 基于dijsktra算法的最短路径求解_基于dijkstra算法的AGV路径规划(含C++代码)
文字&代码来源: @Wasabi喵喵喵 基于dijkstra算法的AGV路径规划 dijkstra算法的路径规划 经典Dijkstra算法是一种贪心算法,根据路径长度递增次序找到最短路径,通常 ...
- Dijkstra算法求单源最短路径
1.最短路径 在一个连通图中,从一个顶点到另一个顶点间可能存在多条路径,而每条路径的边数并不一定相同.如果是一个带权图,那么路径长度为路径上各边的权值的总和.两个顶点间路径长度最短的那条路径称为两个顶 ...
- python算法之Dijkstra算法(迪杰斯特拉)——最短路径问题
##python算法之Dijkstra Dijkstra算法是由荷兰计算机科学家迪杰斯特拉(Dijkstra)于1959 年提出的,因此又叫迪杰斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决 ...
- python求最短路径的方法_python --Dijkstra 算法求取最短路径
#大名鼎鼎的Dijkstra是一种广度优先算法: #!/usr/bin/env python3 # -*- coding: utf-8 -*- import numbers import numpy ...
- Python 中的图:Dijkstra 算法
介绍 图是最有用的数据结构之一.它们可用于对几乎所有事物进行建模--对象关系和网络是最常见的.图像可以表示为网格状的像素图,句子可以表示为单词的图.图表被用于各个领域,从制图到社会心理学,当然它们 ...
- python语言例子_第一个Python实例
1. 第一个Python实例 Python随着时代的进步,变得越来越受欢迎,当然也有它受人喜欢的道理.下面我们首先通过对比来了解一下. 不知道大家有没有学过C或C++,在C语言中输出一个简单的'Hel ...
- python思想读后感_数据结构与算法:Python语言描述读后感1000字
<数据结构与算法:Python语言描述>是一本由裘宗燕著作,机械工业出版社出版的平装图书,本书定价:CNY 45.00,页数:343,特精心从网络上整理的一些读者的读后感,希望对大家能有帮 ...
- Dijkstra算法求解图中最短路径距离
前言:这里是自学内容,讲解的是用python来实现Dijkstra算法,算是入门求解图中最短路径问题的典型案例. 算法简介: 迪杰斯特拉(Dijkstra)算法是一个按照路径长度递增的次序产生的最短路 ...
- Dijkstra 算法——计算有权最短路径(边有权值)
[0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在理解 Dijkstra 的思想并用源代码加以实现: 0.2)最短路径算法的基础知识,参见 http://blog. ...
最新文章
- snmpd服务无法更改默认端口
- android中进度条的使用,android的进度条使用
- linux网络编程之通信协议格式
- 解读Tom介绍的Oracle Database 12c的12个新特性
- 万字教你如何用 Python 实现线性规划
- Apache Mail 发送带附件的邮件
- 巨杉数据库 v5.0 Beta 正式发布!
- android 日历_适用于Android的十大最佳日历应用
- 特别实用的几种SQL语句送给大家,让你的SQL高大上!
- [2018.03.13 T2] 过河(river)
- linux安装gcc等程序包,Linux手动安装gcc-8.3.0
- 网络地址和广播地址的快速计算方法
- kettle org.pentaho.ui.xul.XulException: java.lang.reflect.InvocationTargetException
- android 陀螺仪传感器性能损耗,传感器专题(3)——加速度/陀螺仪传感器
- 宠物卡牌大赛奖励发放结束公告
- 视频动作识别调研(Action Recognition)
- Ubuntu的以太网卡找不到解决方法
- prism 计算 Spearman相关
- 小学计算机课教学设计加教学反思,小学信息技术优秀教学反思
- Springboot+vue项目零食销售商城