python实现Floyd算法


Posted in Python onJanuary 03, 2018

下面是用Python实现Floyd算法的代码,供大家参考,具体内容如下

# -*- coding: utf-8 -*- 
""" 
Created on Thu Jul 13 14:56:37 2017 
 
@author: linzr 
""" 
 
## 表示无穷大 
INF_val = 9999 
 
class Floyd_Path(): 
 def __init__(self, node, node_map, path_map): 
  self.node = node 
  self.node_map = node_map 
  self.node_length = len(node_map) 
  self.path_map = path_map 
  self._init_Floyd() 
  
 def __call__(self, from_node, to_node): 
  self.from_node = from_node 
  self.to_node = to_node 
  return self._format_path() 
 
 def _init_Floyd(self): 
  for k in range(self.node_length): 
   for i in range(self.node_length): 
    for j in range(self.node_length): 
     tmp = self.node_map[i][k] + self.node_map[k][j] 
     if self.node_map[i][j] > tmp: 
      self.node_map[i][j] = tmp 
      self.path_map[i][j] = self.path_map[i][k] 
       
  print '_init_Floyd is end' 
 
 
 def _format_path(self): 
  node_list = [] 
  temp_node = self.from_node 
  obj_node = self.to_node 
  print("the shortest path is: %d")%(self.node_map[temp_node][obj_node]) 
  node_list.append(self.node[temp_node]) 
  while True: 
   node_list.append(self.node[self.path_map[temp_node][obj_node]]) 
   temp_node = self.path_map[temp_node][obj_node] 
   if temp_node == obj_node: 
    break; 
   
  return node_list 
     
 
   
 
 
def set_node_map(node_map, node, node_list, path_map): 
 for i in range(len(node)): 
  ## 对角线为0 
  node_map[i][i] = 0 
 for x, y, val in node_list: 
  node_map[node.index(x)][node.index(y)] = node_map[node.index(y)][node.index(x)] = val 
  path_map[node.index(x)][node.index(y)] = node.index(y) 
  path_map[node.index(y)][node.index(x)] = node.index(x) 
 
  
if __name__ == "__main__": 
 node = ['A', 'B', 'C', 'D', 'E', 'F', 'G'] 
 node_list = [('A', 'F', 9), ('A', 'B', 10), ('A', 'G', 15), ('B', 'F', 2), 
     ('G', 'F', 3), ('G', 'E', 12), ('G', 'C', 10), ('C', 'E', 1), 
     ('E', 'D', 7)] 
 
 ## node_map[i][j] 存储i到j的最短距离 
 node_map = [[INF_val for val in xrange(len(node))] for val in xrange(len(node))] 
 ## path_map[i][j]=j 表示i到j的最短路径是经过顶点j 
 path_map = [[0 for val in xrange(len(node))] for val in xrange(len(node))] 
  
 ## set node_map 
 set_node_map(node_map, node, node_list, path_map) 
 
 
 ## select one node to obj node, e.g. A --> D(node[0] --> node[3]) 
 from_node = node.index('A') 
 to_node = node.index('E') 
 Floydpath = Floyd_Path(node, node_map, path_map) 
 path = Floydpath(from_node, to_node) 
 print path

python实现Floyd算法

运行结果为:
the shortest path is: 23
['A', 'F', 'G', 'C', 'E']

Python 相关文章推荐
python 简易计算器程序,代码就几行
Aug 29 Python
python读取word文档的方法
May 09 Python
Python语言描述机器学习之Logistic回归算法
Dec 21 Python
Python实现找出数组中第2大数字的方法示例
Mar 26 Python
基于windows下pip安装python模块时报错总结
Jun 12 Python
tensorflow: 查看 tensor详细数值方法
Jun 13 Python
python对日志进行处理的实例代码
Oct 06 Python
Python3中关于cookie的创建与保存
Oct 21 Python
Python3 安装PyQt5及exe打包图文教程
Jan 08 Python
python感知机实现代码
Jan 18 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
Feb 11 Python
pandas求平均数和中位数的方法实例
Aug 04 Python
Python如何生成树形图案
Jan 03 #Python
Python爬取十篇新闻统计TF-IDF
Jan 03 #Python
Python制作词云的方法
Jan 03 #Python
Python读取Json字典写入Excel表格的方法
Jan 03 #Python
python基于ID3思想的决策树
Jan 03 #Python
python遍历文件夹下所有excel文件
Jan 03 #Python
Python将多份excel表格整理成一份表格
Jan 03 #Python
You might like
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
jQuery的初始化与对象构建之浅析
2011/04/12 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
JS获取select-option-text_value的方法
2013/12/26 Javascript
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
javascript属性访问表达式用法分析
2015/04/25 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
2015/11/18 Javascript
jQuery+formdata实现上传进度特效遇到的问题
2016/02/24 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
jQuery中show与hide方法用法示例
2016/09/16 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
Angular6中使用Swiper的方法示例
2018/07/09 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
JS数组splice操作实例分析
2019/10/12 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
python代码检查工具pylint 让你的python更规范
2012/09/05 Python
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
python3获取两个日期之间所有日期,以及比较大小的实例
2018/04/08 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
如何使用python写截屏小工具
2020/09/29 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
HTML5实时语音通话聊天MP3压缩传输3KB每秒
2019/08/28 HTML / CSS
东南亚旅游平台:The Trip Guru
2018/01/01 全球购物
Carrs Silver官网:英国著名的银器品牌
2020/08/29 全球购物
新加坡最早生产电动滑板车的制造商之一:FunsToTheFore
2020/09/08 全球购物
师范学院教师自荐书
2014/01/31 职场文书
安全检查管理制度
2014/02/02 职场文书
商场总经理岗位职责
2014/02/03 职场文书
运动会解说词200字
2014/02/06 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
pytorch中的torch.nn.Conv2d()函数图文详解
2022/02/28 Python