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 05 Python
python Django模板的使用方法
Jan 14 Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 Python
Python可变参数用法实例分析
Apr 02 Python
Python中利用aiohttp制作异步爬虫及简单应用
Nov 29 Python
python 实现图片旋转 上下左右 180度旋转的示例
Jan 24 Python
30行Python代码实现高分辨率图像导航的方法
May 22 Python
基于Python爬取51cto博客页面信息过程解析
Aug 25 Python
python exit出错原因整理
Aug 31 Python
python利用线程实现多任务
Sep 18 Python
python 爬取哔哩哔哩up主信息和投稿视频
Jun 07 Python
Python的property属性详细讲解
Apr 11 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事务实例解析
2014/09/08 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
2015/12/15 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
javascript 模拟点击广告
2010/01/02 Javascript
IE6,IE7下js动态加载图片不显示错误
2010/07/17 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
2015/03/13 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
2015/12/02 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
2016/06/07 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
angularJs 表格添加删除修改查询方法
2018/02/27 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
Vue过滤器,生命周期函数和vue-resource简单介绍
2021/01/12 Vue.js
python多线程http下载实现示例
2013/12/30 Python
python中的装饰器详解
2015/04/13 Python
Python代码解决RenderView窗口not found问题
2016/08/28 Python
python 写入csv乱码问题解决方法
2016/10/23 Python
Django日志模块logging的配置详解
2017/02/14 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
Pycharm无法显示动态图片的解决方法
2018/10/28 Python
Python Numpy数组扩展repeat和tile使用实例解析
2019/12/09 Python
pytorch实现保证每次运行使用的随机数都相同
2020/02/20 Python
Python基于DB-API操作MySQL数据库过程解析
2020/04/23 Python
pytorch判断是否cuda 判断变量类型方式
2020/06/23 Python
感恩母亲节活动方案
2014/03/04 职场文书
护士求职自荐信范文
2015/03/04 职场文书
大学生自荐信范文
2015/03/05 职场文书