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批量转换文件编码格式
May 17 Python
Python实现全角半角字符互转的方法
Nov 28 Python
Python实现的多线程http压力测试代码
Feb 08 Python
Windows下Python2与Python3两个版本共存的方法详解
Feb 12 Python
PyQt5 pyqt多线程操作入门
May 05 Python
python采集微信公众号文章
Dec 20 Python
深入浅析Python 中 is 语法带来的误解
May 07 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
Aug 27 Python
在notepad++中实现直接运行python代码
Dec 18 Python
Python单元测试及unittest框架用法实例解析
Jul 09 Python
python爬虫中抓取指数的实例讲解
Dec 01 Python
Python开发五子棋小游戏
May 02 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使用数据库永久连接方式操作MySQL的是与非
2013/06/05 PHP
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
2017/03/14 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
详解javascript函数的参数
2015/11/10 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
理解javascript中的严格模式
2016/02/01 Javascript
jquery过滤特殊字符',防sql注入的实现方法
2016/08/17 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
学习React中ref的两个demo示例
2018/08/14 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
2018/09/27 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
浅谈Python生成器generator之next和send的运行流程(详解)
2017/05/08 Python
Python实现学生成绩管理系统
2020/04/05 Python
django项目搭建与Session使用详解
2018/10/10 Python
python opencv判断图像是否为空的实例
2019/01/26 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
Python如何避免文件同名产生覆盖
2020/06/09 Python
HTML5在canvas中绘制复杂形状附效果截图
2014/06/23 HTML / CSS
Canvas波浪花环的示例代码
2020/08/21 HTML / CSS
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
英国购买威士忌网站:Master of Malt
2019/09/26 全球购物
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
EM Cosmetics官网:由彩妆大神Michelle Phan创办的独立品牌
2020/04/27 全球购物
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
就业意向书范文
2014/04/01 职场文书
宣传活动总结范文
2014/07/01 职场文书
统计学教授推荐信
2014/09/18 职场文书
初中运动会前导词
2015/07/20 职场文书
win10清理dns缓存
2022/04/19 数码科技