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 06 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
Jun 29 Python
简单谈谈Python中的闭包
Nov 30 Python
浅述python中argsort()函数的实例用法
Mar 30 Python
python爬虫_实现校园网自动重连脚本的教程
Apr 22 Python
python使用Flask操作mysql实现登录功能
May 14 Python
Selenium 模拟浏览器动态加载页面的实现方法
May 16 Python
django 使用 request 获取浏览器发送的参数示例代码
Jun 11 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
Jul 11 Python
在Python 中同一个类两个函数间变量的调用方法
Jan 31 Python
Python爬取数据保存为Json格式的代码示例
Apr 09 Python
使用Django实现商城验证码模块的方法
Jun 01 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
我的论坛源代码(十)
2006/10/09 PHP
PHP实现MySQL更新记录的代码
2008/06/07 PHP
MySql中正则表达式的使用方法描述
2008/07/30 PHP
php select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
PHP 返回13位时间戳的实现代码
2016/05/13 PHP
PHP微信开发用Cache 解决数据缓存
2016/07/11 PHP
基于jQuery的动态表格插件
2011/03/28 Javascript
怎么清空javascript数组
2013/05/11 Javascript
Js,alert出现乱码问题的解决方法
2013/06/19 Javascript
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
JS+Ajax实现百度智能搜索框
2017/08/04 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
2017/08/14 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
2018/11/13 Javascript
Vuex的热更替如何实现
2020/06/05 Javascript
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
python去除文件中空格、Tab及回车的方法
2016/04/12 Python
深入理解Python3中的http.client模块
2017/03/29 Python
Python 限制线程的最大数量的方法(Semaphore)
2019/02/22 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
golang/python实现归并排序实例代码
2020/08/30 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
MANGO官方网站:西班牙芒果服装品牌
2017/01/15 全球购物
新西兰网上购物,折扣店:BestDeals.co.nz
2019/03/20 全球购物
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
德国网上超市:myTime.de
2019/08/26 全球购物
大学迎新标语
2014/06/26 职场文书
毕业论文致谢范文
2015/05/14 职场文书
大学班干部竞选稿
2015/11/20 职场文书
班委竞选稿范文
2015/11/21 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
python元组打包和解包过程详解
2021/08/02 Python
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技