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使用os模块的os.walk遍历文件夹示例
Jan 27 Python
python使用arp欺骗伪造网关的方法
Apr 24 Python
Python黑魔法@property装饰器的使用技巧解析
Jun 16 Python
Python AES加密实例解析
Jan 18 Python
python实现Windows电脑定时关机
Jun 20 Python
代码详解django中数据库设置
Jan 28 Python
Django单元测试工具test client使用详解
Aug 02 Python
简单介绍python封装的基本知识
Aug 10 Python
python装饰器使用实例详解
Dec 14 Python
python使用自定义钉钉机器人的示例代码
Jun 24 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
Feb 25 Python
Django后端按照日期查询的方法教程
Feb 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
yii2.0实现验证用户名与邮箱功能
2015/12/22 PHP
PHP实现常用排序算法的方法
2020/02/05 PHP
List all the Databases on a SQL Server
2007/06/21 Javascript
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
2016/08/02 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
解决Mac下安装nmp的淘宝镜像失败问题
2018/05/16 Javascript
JS实现字符串中去除指定子字符串方法分析
2018/05/17 Javascript
Javascript三种字符串连接方式及性能比较
2019/05/28 Javascript
Python版微信红包分配算法
2015/05/04 Python
Python实现HTTP协议下的文件下载方法总结
2016/04/20 Python
详解Python装饰器由浅入深
2016/12/09 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
Python实现破解12306图片验证码的方法分析
2017/12/29 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
python实现高斯(Gauss)迭代法的例子
2019/11/20 Python
Python中logging日志库实例详解
2020/02/19 Python
Python如何把十进制数转换成ip地址
2020/05/25 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
中国最大的名表商城:万表网
2016/08/29 全球购物
美国购车网站:TrueCar
2016/10/19 全球购物
HomeAway的巴西品牌:Alugue Temporada
2018/04/10 全球购物
《学会待客》教学反思
2014/02/22 职场文书
中级会计职业生涯规划书
2014/03/01 职场文书
销售岗位职责范本
2014/06/12 职场文书
银行转正自我鉴定
2014/09/29 职场文书
美国旅游签证工作证明
2014/10/14 职场文书
升职自荐信怎么写
2015/03/05 职场文书
简历自我评价优缺点
2015/03/11 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
详解Python中下划线的5种含义
2021/07/15 Python
Python制作表白爱心合集
2022/01/22 Python