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 相关文章推荐
用C++封装MySQL的API的教程
May 06 Python
Python正则表达式实现截取成对括号的方法
Jan 06 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
Jan 15 Python
python如何通过twisted实现数据库异步插入
Mar 20 Python
python自动发送邮件脚本
Jun 20 Python
由Python编写的MySQL管理工具代码实例
Apr 09 Python
python3.6连接mysql数据库及增删改查操作详解
Feb 10 Python
Python json模块与jsonpath模块区别详解
Mar 05 Python
python 日志 logging模块详细解析
Mar 31 Python
python ETL工具 pyetl
Jun 07 Python
使用python matploblib库绘制准确率,损失率折线图
Jun 16 Python
python openssl模块安装及用法
Dec 06 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
关于在php.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
php 接口类与抽象类的实际作用
2009/11/26 PHP
PHP中常用的字符串格式化函数总结
2014/11/19 PHP
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
JQuery从头学起第一讲
2010/07/04 Javascript
js事件(Event)知识整理
2012/10/11 Javascript
jQuery页面图片伴随滚动条逐渐显示的小例子
2013/03/21 Javascript
js监听滚动条滚动事件使得某个标签内容始终位于同一位置
2014/01/24 Javascript
简介JavaScript中search()方法的使用
2015/06/06 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
js实现的黑背景灰色二级导航菜单效果代码
2015/08/24 Javascript
javascript中sort() 方法使用详解
2015/08/30 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
vue.js删除动态绑定的radio的指定项
2017/06/02 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
详解vue组件基础
2018/05/04 Javascript
用Electron写个带界面的nodejs爬虫的实现方法
2019/01/29 NodeJs
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
2020/01/22 Javascript
js实现简单扫雷
2020/11/27 Javascript
Python学习思维导图(必看篇)
2017/06/26 Python
python基础之入门必看操作
2017/07/26 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
python温度转换华氏温度实现代码
2020/12/06 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
财务人员的自我评价范文
2014/03/03 职场文书
信电学院毕业生自荐书
2014/05/24 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
技术股东合作协议书
2014/12/02 职场文书
导游词之山海关
2019/12/10 职场文书
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang