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程序设计入门(5)类的使用简介
Jun 16 Python
在Django的模型中执行原始SQL查询的方法
Jul 21 Python
Python编程实现的简单Web服务器示例
Jun 22 Python
python 获取图片分辨率的方法
Jan 08 Python
pandas修改DataFrame列名的实现方法
Feb 22 Python
使用Django开发简单接口实现文章增删改查
May 09 Python
Python彻底删除文件夹及其子文件方式
Dec 23 Python
浅谈python累加求和+奇偶数求和_break_continue
Feb 25 Python
Python新手如何理解循环加载模块
May 29 Python
我对PyTorch dataloader里的shuffle=True的理解
May 20 Python
Qt自定义Plot实现曲线绘制的详细过程
Nov 02 Python
Python socket如何解析HTTP请求内容
Feb 12 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中函数的形参与实参的问题说明
2010/09/01 PHP
php删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
PHP闭包(Closure)使用详解
2013/05/02 PHP
利用PHP+JS实现搜索自动提示(实例)
2013/06/09 PHP
php实现约瑟夫问题的方法小结
2015/03/23 PHP
根据分辩率调用不同的CSS.
2007/01/08 Javascript
菜鸟javascript基础资料整理3 正则
2010/12/06 Javascript
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
JSON与XML优缺点对比分析
2015/07/17 Javascript
switch语句的妙用(必看篇)
2016/10/03 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
nodejs中sleep功能实现暂停几秒的方法
2017/07/12 NodeJs
node实现分片下载的示例代码
2018/10/17 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
2020/04/10 Javascript
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
介绍Python中的一些高级编程技巧
2015/04/02 Python
Python实现的计数排序算法示例
2017/11/29 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
Python Tkinter模块实现时钟功能应用示例
2018/07/23 Python
用python爬取租房网站信息的代码
2018/12/14 Python
Python3简单实现串口通信的方法
2019/06/12 Python
pygame实现贪吃蛇游戏(下)
2019/10/29 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
2020/01/03 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
Keras搭建自编码器操作
2020/07/03 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
2021/02/24 Python
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
Chicco婴儿用品美国官网:汽车座椅、婴儿推车、高脚椅等
2018/11/05 全球购物
Keds加拿大官网:购买帆布运动鞋和皮鞋
2019/09/26 全球购物
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
《最后的姿势》教学反思
2014/02/27 职场文书
公司保密承诺书
2014/03/27 职场文书
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js