使用Floyd-Warshall算法 求图两点之间的最短路径

不允许有负权边,时间复杂度高,思路简单

# 城市地图(字典的字典)

# 字典的第1个键为起点城市,第2个键为目标城市其键值为两个城市间的直接距离

# 将不相连点设为INF,方便更新两点之间的最小值

INF = 99999
G = {1:{1:0, 2:2, 3:6, 4:4},
2:{1:INF, 2:0, 3:3, 4:INF},
3:{1:7, 2:INF, 3:0, 4:1},
4:{1:5, 2:INF, 3:12, 4:0}
}

# 算法思想:

# 每个顶点都有可能使得两个顶点之间的距离变短

# 当两点之间不允许有第三个点时,这些城市之间的最短路径就是初始路径

# Floyd-Warshall算法核心语句

# 分别在只允许经过某个点k的情况下,更新点和点之间的最短路径

for k in G.keys(): # 不断试图往两点i,j之间添加新的点k,更新最短距离

for i in G.keys():
for j in G[i].keys():
if G[i][j] > G[i][k] + G[k][j]:
G[i][j] = G[i][k] + G[k][j]
for i in G.keys():
print G[i].values()
结果:
[0, 2, 5, 4]
[9, 0, 3, 4]
[6, 8, 0, 1]
[5, 7, 10, 0]

python数据结构与算法——图的最短路径(Dijkstra算法)

# Dijkstra算法——通过边实现松弛 # 指定一个点到其他各顶点的路径——单源最短路径 # 初始化图参数 G = {1:{1:0, 2:1, 3:12}, 2:{2:0, 3:9, 4:3}, ...

python数据结构与算法——图的最短路径(Bellman-Ford算法)解决负权边

# Bellman-Ford核心算法 # 对于一个包含n个顶点,m条边的图, 计算源点到任意点的最短距离 # 循环n-1轮,每轮对m条边进行一次松弛操作 # 定理: # 在一个含有n个顶点的图中,任意 ...

7-8 哈利·波特的考试(25 分)(图的最短路径Floyd算法)

7-8 哈利·波特的考试(25 分) 哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等.反方向变 ...

数据结构与算法-图的最短路径Dijkstra

一  无向图单源最短路径,Dijkstra算法 计算源点a到图中其他节点的最短距离,是一种贪心算法.利用局部最优,求解全局最优解. 设立一个visited访问和dist距离数组,在初始化后每一次收集一 ...

算法-图(2)Bellman-Ford算法求最短路径

template void Bellman-Ford(Graph&G, int v, E dist[], int path ...

Floyd—Warshall算法

我们用DP来求解任意两点间的最短路问题 首先定义状态:d[k][i][k]表示使用顶点1~k,i,j的情况下,i到j的最短路径 (d[0][i][j]表示只使用i和j,因此d[0][i][j] = c ...

python数据结构与算法

最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

图论之最短路径(1)——Floyd Warshall & Dijkstra算法

开始图论学习的第二部分:最短路径. 由于知识储备还不充足,暂时不使用邻接表的方法来计算. 最短路径主要分为两部分:多源最短路径和单源最短路径问题 多源最短路径: 介绍最简单的Floyd Warshal ...

c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法

c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法 图的最短路径的概念: 一位旅客要从城市A到城市B,他希望选择一条途中中转次数最少的路线.假设途中每一站都需要换车,则这个问题反映到图上就是 ...

随机推荐

修复百度编辑器(UM)禁用时上传图片按钮还可点击的BUG;

找到umeditor.js 大约在9342行,show 函数中,在方法开始部分加入: if(me.root().data().edui$mergeObj.hasClass("edui-dis ...

android常用的一些UI调试命令am,pm

截取usb数据包,控制usb设备----Relay设备

在项目开发当中,我们需要一个usb转继电器的设备当开关控制无线发射设备,采购部采购时并未详细了解Relay设备的运行环境就买了一批设备,之后发现设备厂家只提供了windows库,而我们是要在linux ...

远程控制篇:在DELPHI程序中拨号上网

用MODEM拨号上网,仍是大多数个人网民选择上网的方式.如果能在我们的应用程序中启动拨号连接(如IE浏览器程序中的自动拨号功能),无疑将会方便我们的软件用户(不用再切换应用程序,运行拨号网络),提高我 ...

种子文件文件结构

估计80%以上接触互联网的人都知道bt是什么东西,任何一个用bt下载的人都知道这样一个概念,种子.种子就是记录了p2p对等网络中tracker, nodes, files等信息,也就是说,这个 ...

windows7+iis7+php的配置

最近在找工作,人被逼了,所以没事就学习php了.以下是开发环境的搭建: 环境搭建 然后就是解析php脚本的两种配置方法: fastCgiModule与ISAPI方式 两种配置方法 本文为转载...

if/else 条件

if...else...和if语句是不同的运行方式: public class MyFirstApp{ public static void main(String[] args){ int x=3; ...

Executor框架简介 在Java5之后,并发编程引入了一堆新的启动.调度和管理线程的API.Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.coc ...

window下安装Apache+PHP

本地系统为windows 10,Apache选择httpd-2.4.25-x64-vc14-r1,PHP选择php7.1_x64线程安全版. 1.安装Apache 将apache解压到c:/serve ...

JasperReport子报表参数传递

子报表参数传递 下图的参数名称可以自定义 再子报表新增一个同名称的参数即可