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交换变量
Sep 06 Python
Python计算已经过去多少个周末的方法
Jul 25 Python
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 Python
python 限制函数执行时间,自己实现timeout的实例
Jan 12 Python
Python实现统计英文文章词频的方法分析
Jan 28 Python
python快排算法详解
Mar 04 Python
Python 实现遥感影像波段组合的示例代码
Aug 04 Python
使用Python串口实时显示数据并绘图的例子
Dec 26 Python
解决jupyter运行pyqt代码内核重启的问题
Apr 16 Python
Python内存映射文件读写方式
Apr 24 Python
python删除指定列或多列单个或多个内容实例
Jun 28 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 array_map array_multisort 高效处理多维数组排序
2009/06/11 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
2019/10/03 PHP
ExtJS DOM元素操作经验分享
2013/08/28 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
2016/09/14 Javascript
第一次动手实现bootstrap table分页效果
2016/09/22 Javascript
AngularJS表格样式简单设置方法示例
2017/03/03 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
2018/03/05 Javascript
angular-tree-component的使用详解
2018/07/30 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS OG
2018/03/30 DOTA
Python中的字符串类型基本知识学习教程
2016/02/04 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
python 使用装饰器并记录log的示例代码
2019/07/12 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
个人优缺点自我评价
2014/01/27 职场文书
业务员的岗位职责
2014/03/15 职场文书
课程改革实施方案
2014/03/16 职场文书
员工试用期考核自我鉴定
2014/04/13 职场文书
微笑面对生活演讲稿
2014/05/13 职场文书
国际经济与贸易专业求职信
2014/07/10 职场文书
教师党员先进性教育自我剖析材料思想汇报
2014/09/24 职场文书
归途列车观后感
2015/06/17 职场文书
爱护环境建议书
2015/09/14 职场文书
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
2022/04/07 Servers