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常用算法学习基础教程
Apr 13 Python
Python中Selenium模拟JQuery滑动解锁实例
Jul 26 Python
利用Python正则表达式过滤敏感词的方法
Jan 21 Python
使用Python控制摄像头拍照并发邮件
Apr 23 Python
python字典排序的方法
Oct 12 Python
python实现对列表中的元素进行倒序打印
Nov 23 Python
python-视频分帧&多帧合成视频实例
Dec 10 Python
PyCharm下载和安装详细步骤
Dec 17 Python
Numpy之reshape()使用详解
Dec 26 Python
解决import tensorflow as tf 出错的原因
Apr 16 Python
django使用JWT保存用户登录信息
Apr 22 Python
Python中npy和mat文件的保存与读取
Apr 24 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 DataGrid 实现代码
2009/08/12 PHP
mysql下创建字段并设置主键的php代码
2010/05/16 PHP
php函数之子字符串替换 str_replace
2011/03/23 PHP
解析PHP汉字转换拼音的类
2013/06/18 PHP
php快速排序原理与实现方法分析
2016/05/26 PHP
laravel框架实现去掉URL中index.php的方法
2019/10/12 PHP
Aster vs KG BO3 第一场2.18
2021/03/10 DOTA
jQuery的一些特性和用法整理小结
2010/01/13 Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
2011/10/29 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
简单解析JavaScript中的__proto__属性
2016/05/10 Javascript
jQuery焦点图轮播效果实现方法
2016/12/19 Javascript
JS实现计算小于非负数n的素数的数量算法示例
2019/02/26 Javascript
小程序hover-class点击态效果实现
2019/02/26 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
2019/12/13 Javascript
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
使用Python对Excel进行读写操作
2017/03/30 Python
python调用xlsxwriter创建xlsx的方法
2018/05/03 Python
PyCharm代码格式调整方法
2018/05/23 Python
python生成带有表格的图片实例
2019/02/03 Python
Python图像处理PIL各模块详细介绍(推荐)
2019/07/17 Python
Python selenium爬取微博数据代码实例
2020/05/22 Python
你正在寻找的CSS3 动画技术
2011/07/27 HTML / CSS
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
阿姆斯特丹杜莎夫人蜡像馆官方网站:Madame Tussauds Amsterdam
2019/03/12 全球购物
办理退休介绍信
2014/01/09 职场文书
火灾现场处置方案
2014/05/28 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
早读课迟到检讨书
2014/09/25 职场文书
旅行社计调工作总结
2015/08/12 职场文书
两行代码解决Jupyter Notebook中文不能显示的问题
2021/04/24 Python
Python-OpenCV教程之图像的位运算详解
2021/06/21 Python