python求多条最短路径_Python实现最短路径算法(Dijkstra's algorithm)
给出的图G赋权连接矩阵为:
adjacency_matrix
= [ [0, 1, 10, -1, -1, 2],
[10, 0, 1, -1, -1, -1],
[1, 10, 0, -1, -1, -1],
[-1, -1, 2, 0, 1, 10],
[-1, -1, -1, 10, 0, 1],
[-1, -1, -1, 1, 10, 0]]
import sys
max = sys.maxsize
vertices_number = 6
adjacency_matrix = [
[0, 1, 10, -1, -1, 2],
[10, 0, 1, -1, -1, -1],
[1, 10, 0, -1, -1, -1],
[-1, -1, 2, 0, 1, 10],
[-1, -1, -1, 10, 0, 1],
[-1, -1, -1, 1, 10, 0]]
start = []
dest = ["2", "5"]
key = []
def init_keys(s: int):
global key
key = [ max ] * vertices_number
key[s] = 0
def dijkstra(from_vertex, dest_vertex):
fid = int(from_vertex) - 1
tid = int(dest_vertex) - 1
init_keys(fid)
rel = [fid]
min_vertex = fid
hop_path = {}
while len(rel) <= vertices_number and min_vertex != tid:
for i in range(vertices_number):
if i != min_vertex and i not in rel and \
adjacency_matrix[min_vertex][i] > 0 \
and key[i] > adjacency_matrix[min_vertex][i]:
key[i] = key[min_vertex] + adjacency_matrix[min_vertex][i]
hop_path.update({i + 1: {"from": min_vertex + 1, "cost": adjacency_matrix[min_vertex][i]}})
if min_vertex not in rel:
rel.append(min_vertex)
min_vertex = tid
for i in range(vertices_number):
if i not in rel and key[i] < key[min_vertex]:
min_vertex = i
if len(hop_path) == 0 or int(dest_vertex) not in hop_path:
return -1, -1
else:
next_hop = int(dest_vertex)
path_str = dest_vertex
while hop_path[next_hop]["from"] != int(from_vertex):
cost = hop_path[next_hop]["cost"]
next_hop = hop_path[next_hop]["from"]
path_str = "{} -({})-> {}".format(str(next_hop), cost ,path_str)
path_str = "{} -({})-> {}".format(str(hop_path[next_hop]["from"]), hop_path[next_hop]["cost"], path_str)
return key[tid], path_str
def find_shortest_router():
for s in start:
print("Forwarding Table for {}".format(s))
print("{:>10} {:>10} {}".format("To", "Cost", "Path"))
for d in dest:
c, n = dijkstra(s, d)
print("{:>10} {:>10} {}".format(d, c, n))
def main():
for i in range(1, vertices_number + 1):
if str(i) not in dest:
start.append(str(i))
find_shortest_router()
if __name__ == '__main__':
main()
执行结果:
捕获.JPG
python求多条最短路径_Python实现最短路径算法(Dijkstra's algorithm)相关推荐
- python闭环最短路径_python实现最短路径的实例方法
最短路径问题(python实现) 解决最短路径问题:(如下三种算法) (1)迪杰斯特拉算法(Dijkstra算法) (2)弗洛伊德算法(Floyd算法) (3)SPFA算法 第一种算法: Dijkst ...
- python迷宫最短路径_python实现最短路径的实例方法
解决最短路径问题:(如下三种算法) (1)迪杰斯特拉算法(Dijkstra算法) (2)弗洛伊德算法(Floyd算法) (3)SPFA算法 第一种算法: Dijkstra算法 广度优先搜索解决赋权有向 ...
- python棋盘最短路径_Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例...
本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...
- python求一条线的长度_python求线段的长度-女性时尚流行美容健康娱乐mv-ida网
女性时尚流行美容健康娱乐mv-ida网 mvida时尚娱乐网 首页 美容 护肤 化妆技巧 发型 服饰 健康 情感 美体 美食 娱乐 明星八卦 首页 > 高级搜索 excel里去掉最高分最低分再 ...
- python求奇数的乘积_python求偶数之积
今天小编就为大家分享一篇python 求1-100之间的奇数或者偶数之和的实例,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 如下所示: i=0sum1=0sum2=0... P ...
- python求n的阶乘_python求n的阶乘
阶乘是基斯顿·卡曼(Christian Kramp,1760-1826)于1808年发明的运算符号,是数学术语.一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1 ...
- python求平方根的代码_Python求解平方根的方法
本文实例讲述了Python求解平方根的方法.分享给大家供大家参考.具体如下: 主要通过SICP的内容改写而来.基于newton method求解平方根.代码如下: #!/usr/bin/python ...
- python 求平面两点距离_Python求平面内点到直线距离的实现
近期遇到个问题,需要计算平面内点到直线的距离,发现数学知识都还给老师了,度娘后找到计算方法,特此记录. 点到直线的计算公式: 通过公式推导,得到信息: A:直线斜率 B:固定值-1 C:直线截距b 转 ...
- python求两数最大公因数_Python求两个数的最大公约数
Python求两个数的最大公约数 一.求最大公约数算法: 1. 整数A对整数B进行取整, 余数用整数C来表示 举例: C = A % B 2. 如果C等于0,则C就是整数A和整数B的最大公约数 3. ...
- python求三个数平均值_python求三个数平均值
本文收集整理关于python求三个数平均值的相关议题,使用内容导航快速到达. 内容导航: Q1:利用python3.x计算任意数据平均值 l=[1,2,3]def ave(a):print(sum(a ...
最新文章
- 今天理解了一下HTTP头的Last-Modified 与If-Modified-Since
- 高精度矢量汉字的一种填充方法_使用PS中的钢笔工具制作一只蝴蝶矢量插画
- linux禁止线程网络,linux – 如何在gdb中禁用新线程/线程退出的消息?
- django和flask用MD5加密密码
- 如何搭建个人博客或企业官网
- mysql数据库无法启动_Mysql数据库无法启动问题的解决方案
- MySQL用C访问的示例代码
- 测试高中低音的软件6,分别用什么音乐来测试设备的高中低音。
- 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT) – 整理
- C#POP3协议实现SSL验证登陆GMAIL
- 揭秘3D游戏模型贴图师
- 高德地图各种摄像头图标_汽车导航怎么看?高德地图各种符号图标图解大全
- sql注入漏洞--sqlmap使用
- 论文阅读——INSIDER:Designing In-Storage Computing System for Emerging High-Performance Drive
- SPP、ASPP与PPM
- 时间复杂度和空间复杂度复习 (一)
- Kotlin协程实现原理
- sort函数用法使用lambda表达式自定义sort排序方法
- 【chatgpt代码系列】激光定位激光与地图匹配置信度算法
- 飞机机翼机身对接结构数值计算分析(ANSYS)