Floyd算法简介
Floyd算法
floyd算法(多源最短路径) python实现
例题
求下图各节点最短路径

Floyd算法如下:

from math import *
import numpy as np
#创建节点字典
set_nodes={"v1":0,"v2":1,"v3":2,"v4":3,"v5":4,"v6":5,"v7":6,"v8":7,"v9":8,"v10":9,"v11":10}#创建初始化距离矩阵
dis = np.array([[0,2,8,1,inf,inf,inf,inf,inf,inf,inf],\[2,0,6,inf,1,inf,inf,inf,inf,inf,inf],\[8,6,0,7,5,1,2,inf,inf,inf,inf],\[1,inf,7,0,inf,inf,9,inf,inf,inf,inf],\[inf,1,5,inf,0,3,inf,2,9,inf,inf],\[inf,inf,1,inf,3,0,4,inf,6,inf,inf],\[inf,inf,2,9,inf,4,0,inf,3,1,inf],\[inf,inf,inf,inf,2,inf,inf,0,7,inf,9],\[inf,inf,inf,inf,9,6,3,7,0,1,2],\[inf,inf,inf,inf,inf,inf,1,inf,1,0,4],\[inf,inf,inf,inf,inf,inf,inf,9,2,4,0]])#初始化一个矩阵 记录父节点 先令父节点为终点本身
parent=[[i for i in range(11)] for j in range(11)]#核心代码
#i为中间节点
for i in range(len(set_nodes)):#j为起点for j in range(len(set_nodes)):#k为终点for k in range(len(set_nodes)):#更新最短距离dis[j][k]=min(dis[j][k],dis[j][i]+dis[i][k])parent[j][k]=parent[j][i]#测试代码
if __name__ == '__main__':print("各点的之间的最短距离\n",dis)start, end = input("请输入起始点:").split()print(dis[set_nodes[start]][set_nodes[end]])

上例可通过添加中间节点来导出路径,请完善,望指教。

以下是摘取别人的代码(打印出了路径),请大家参考:

'''最短路径和Floyd算法'''
from math import *
print("point=('v_1','v_2','v_3','v_4','v_5','v_6','v_7','v_8','v_9','v_10','v_11')")
p=int(input("请输入如1表示v_1形式的起点(v_1--v_11):"))
q=int(input("请输入如1表示v_1形式的终点(v_1--v_11):"))point=('v_1','v_2','v_3','v_4','v_5','v_6','v_7','v_8','v_9','v_10','v_11')
num=len(point)
distance_0=[[0,2,8,1,inf,inf,inf,inf,inf,inf,inf],      #图形最初任意两点直接距离矩阵[2,0,6,inf,1,inf,inf,inf,inf,inf,inf],[8,6,0,7,5,1,2,inf,inf,inf,inf],[1,inf,7,0,inf,inf,9,inf,inf,inf,inf],[inf,1,5,inf,0,3,inf,2,9,inf,inf],[inf,inf,1,inf,3,0,4,inf,6,inf,inf],[inf,inf,2,9,inf,4,0,inf,3,1,inf],[inf,inf,inf,inf,2,inf,inf,0,7,inf,9],[inf,inf,inf,inf,9,6,3,7,0,1,2],[inf,inf,inf,inf,inf,inf,1,inf,1,0,4],[inf,inf,inf,inf,inf,inf,inf,9,2,4,0]]prior = [[0 for i in range(1,12)] for j in range(1,12)]   #初始化一个空矩阵用来存放所经过的节点
for i in range(num):for j in range(num):prior[i][j]=j+1
# print(prior)
for m in range(num):      #i相当于是中间点for i in range(num):      #j相当于是起始点for j in range(num):      #m相当于是终点if (distance_0[i][j] > distance_0[i][m]+distance_0[m][j]):distance_0[i][j] = distance_0[i][m]+distance_0[m][j]prior[i][j]=prior[i][m]else:continue
# print("v_1到v_11的最短路程为:",distance_0[0][10])      #打印v_1到v_11距离
# print("v_%d"%p,"到v_%d"%q,"的最短路程为:",distance_0[p-1][q-1])       #打印任意两点距离
if prior[p-1][q-1]==q:print('v_%d'%p,'到v_%d'%q,'的路径为:v_%d'%(p)+'->'+'v_%d'%(q),":","路程为:",distance_0[p-1][q-1])
else:x=prior[p-1][q-1]mid=[x]      #创建一个空列表装载路径中间点while (prior[x-1][q-1]!=q):x=prior[x-1][q-1]mid.append(x)print('v_%d'% p,'到v_%d'%q,'的路径为:v_%d'%p,end="")for i in mid:print('->'+'v_%d'%i,end="")print('->'+'v_%d'%(q),":","路程为:",distance_0[p-1][q-1])

谢谢。

Python Floyd算法求最短路径相关推荐

  1. 动态规划 - Floyd算法求最短路径 - (Matlab建模)

    Floyd算法又称为弗洛伊德算法.插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算 ...

  2. Floyd算法求最短路径(附代码实例)

    Floyd算法 使用范围: 1)求每对顶点的最短路径; 2)有向图.无向图和混合图; 算法思想: 直接在图的带权邻接矩阵中用插入顶点的方法依次递推地构造出n个矩阵D(1), D(2), -, D(n) ...

  3. python写算法求最短路径,Python实现迪杰斯特拉算法并生成最短路径的示例代码

    def Dijkstra(network,s,d):#迪杰斯特拉算法算s-d的最短路径,并返回该路径和代价 print("Start Dijstra Path--") path=[ ...

  4. 最短路径 floyd java_java实现Floyd算法求最短路径

    关于无向图的最短路径问题: 这个程序输出:最短路径矩阵 例如:W[0][5]=9 代表vo->v5的最短路径为9 W=: 0 1 3 7 4 9 1 0 2 6 3 8 3 2 0 4 1 6 ...

  5. C++floyd warshall算法求最短路径(附完整源码)

    C++floyd warshall算法求最短路径 floyd warshall算法求最短路径的完整源码(定义,实现,main函数测试) floyd warshall算法求最短路径的完整源码(定义,实现 ...

  6. Floyd算法求无向图最小环

    原理可看菊苣博文:http://www.cnblogs.com/khan724/p/4383686.html 自己代码中解释一些小细节.该算法适用于无向图,而有向图的最小环,实际上就是初始化所有点为i ...

  7. Floyd算法求解最短路径

    Floyd算法求解最短路径 1.算法概述 2.算法实例 3.算法实战 3.1 算法描述 3.2 解题思路 3.3 代码实现 1.算法概述   Floyd算法又称为插点法,是一种利用动态规划的思想寻找给 ...

  8. C++迪杰斯特拉算法求最短路径

    一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...

  9. .弗洛伊德算法求最短路径

    5. 弗洛伊德算法求最短路径 [问题描述] 对于下面一张若干个城市,以及城市之间距离的地图,请采用弗洛伊德算法求出所有城市之间的最短路径. [输入形式] 顶点个数n,以及n*n的邻接矩阵,其中不可达使 ...

最新文章

  1. Delphi 的绘图功能[10] - TFONT 类
  2. java应用系统正确的连接DM主备集群
  3. 【HDU 3400】Line belt(三分法)
  4. NIST发布企业移动应用安全建议参考指南
  5. 采用我国国产处理器的超级计算机是,“中国芯”超级电脑合肥诞生 首次采用国产CPU芯片...
  6. HTML: 引号不能忽视
  7. shell ## %% 使用说明
  8. java http get和post请求
  9. 收藏:常用的广告代码的表达式
  10. 如何直接删除mysql中的重复数据_如何删除mysql数据库中重复的数据(部分重复)?...
  11. android投影仪分辨率是多少,如何挑选投影仪流明 分辨率?千万不要这样选,不然后果不堪设想...
  12. jmail邮件服务器,asp+JMAIL实现发送邮件
  13. linux添加jetdirect协议,《HP jetdirect 管理指南》教程.pdf
  14. 故事系列之一:围棋世界里看天赋和勤奋
  15. 超声波传感器(CHx01ICU-x0201ICU-30201) - 资源抢先看(资料获取)
  16. Notepad++的64位HexEditor免费下载
  17. 计算机二级必过知识点大全,计算机二级ms-office办公软件必过知识点.doc
  18. 单选题计算机科学的奠基人是,计算机科学的奠基人是( )。
  19. mac java 创建文件夹_在mac电脑上创建java的一些简单操作
  20. 二十八、动词不定式 2 做表语、宾语、后置定语、状语

热门文章

  1. Intel平台不可忽略的接口eSPI
  2. [OpenGL]一个简单的地球月亮太阳运转模型
  3. linux单盘raid0更换,MegaCli修复单盘RAID0
  4. 初中教师计算机培训方案,初中教师信息技术培训与考核校本培训的实施方案
  5. 教你用软碟通(UltraISO)刻录系统光盘
  6. Express中带有参数的路由请求req.query、req.body、req.params
  7. 制作网站首页(小兔鲜儿电商购物平台)
  8. Power Apps 常用公式
  9. 第二期 AOSP 环境搭建、下载和编译 《手机就是开发板》
  10. ZXing3.3.3 生成二维码带logo