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 相关文章推荐
linux系统使用python监测网络接口获取网络的输入输出
Jan 15 Python
Python实现截屏的函数
Jul 25 Python
python 读取txt,json和hdf5文件的实例
Jun 05 Python
python查看列的唯一值方法
Jul 17 Python
python保存文件方法小结
Jul 27 Python
Python3中列表list合并的四种方法
Apr 19 Python
Python3.5装饰器原理及应用实例详解
Apr 30 Python
python调用Matplotlib绘制分布点图
Oct 18 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 Python
使用Python Tkinter实现剪刀石头布小游戏功能
Oct 23 Python
基于Django快速集成Echarts代码示例
Dec 01 Python
如何使用Python对NetCDF数据做空间相关分析
Apr 21 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 UBB 解析实现代码
2011/11/27 PHP
php中大括号作用介绍
2012/03/22 PHP
8个PHP数组面试题
2015/06/23 PHP
PHP+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
谈谈PHP连接Access数据库的注意事项
2016/08/12 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
2019/10/17 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
javascript 清空form表单中某种元素的值
2009/12/26 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
玩转方法:call和apply
2014/05/08 Javascript
AngularJS指令中的绑定策略实例分析
2016/12/14 Javascript
详解RequireJS按需加载样式文件
2017/04/12 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
ES6中新增的Object.assign()方法详解
2017/09/22 Javascript
JS实现简单获取最近7天和最近3天日期的方法
2018/04/18 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
ES6 系列之 Generator 的自动执行的方法示例
2018/10/19 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python运行的17个时新手常见错误小结
2012/08/07 Python
Python编程中NotImplementedError的使用方法
2018/04/21 Python
Python中dict和set的用法讲解
2019/03/28 Python
Python3.5多进程原理与用法实例分析
2019/04/05 Python
python中执行smtplib失败的处理方法
2020/07/01 Python
Django celery异步任务实现代码示例
2020/11/26 Python
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
德国购买门票网站:ADticket.de
2019/10/31 全球购物
Shell如何接收变量输入
2012/09/24 面试题
应届大学生的推荐信
2013/11/20 职场文书
新三好学生主要事迹
2014/01/23 职场文书
给老师的感谢信
2015/01/20 职场文书
置业顾问岗位职责
2015/02/09 职场文书
学校清洁工岗位职责
2015/04/15 职场文书
合作意向书范本
2019/04/17 职场文书
2019大学生社会实践报告汇总
2019/08/16 职场文书