python实现弗洛伊德算法的方法

  介绍

小编给大家分享一下python实现弗洛伊德算法的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

下面是用python实现弗洛伊德算法的代码,具体内容如下

#, - *安康;编码:,utf-8  - *安康;   “““,   Created 提醒Thu  Jul  13, 14:56:37  2017年,   ,   @author: linzr    “““,   ,   # #,表示无穷大,   INF_val =, 9999,   ,   class  Floyd_Path ():   ,def  __init__(自我,时间节点,大敌;;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__ (from_node,自我,还以为;to_node):,   时间=self.from_node 才能;from_node    时间=self.to_node 才能;to_node    return 才能;self._format_path (),   ,   ,def  _init_Floyd(自我):,   for 才能;k 范围(self.node_length):拷贝,   ,,for 小姐:范围(self.node_length):拷贝,   ,,,for  j 范围(self.node_length):拷贝,   ,,,,tmp =, self.node_map[我][k], +, self.node_map [k] [j],   ,,,,if  self.node_map[我][j],祝辞,tmp:,   ,,,,,self.node_map[我][j],=, tmp    ,,,,,self.path_map[我][j],=, self.path_map[我][k],   ,,,,,,   print 才能;& # 39;_init_Floyd  is 结束,,   ,   ,   ,def  _format_path(自我):,   时间=node_list 才能;[],   时间=temp_node 才能;self.from_node    时间=obj_node 才能;self.to_node    打印才能(“,shortest  path 是:,% d") % (self.node_map [temp_node] [obj_node]),   node_list.append才能(self.node [temp_node]),   事实:while 才能;   ,,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:,   ,,,休息,,   ,,   return 才能;node_list    ,,,,   ,   ,,   ,   ,   def  set_node_map (node_map,时间节点,大敌;;node_list, path_map):,   ,for 小姐:范围(len(节点)):拷贝,   # #,才能对角线为0,   node_map才能[我][我],=,0,   ,for  x, y,, val  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 [& # 39;一个# 39;,,& # 39;b # 39;,, & # 39; c # 39;,, & # 39; d # 39;,, & # 39; e # 39;,, & # 39; f # 39;,, & # 39;舌鳎# 39;],   ,node_list =,((& # 39;一个# 39;,,& # 39;f # 39;,, 9),,(& # 39;一个# 39;,,& # 39;b # 39;,, 10),,(& # 39;一个# 39;,,& # 39;舌鳎# 39;,,15),,(& # 39;b # 39;,, & # 39; f # 39;,, 2),,   ,,,,(& # 39;舌鳎# 39;,,& # 39;f # 39;,, 3),,(& # 39;舌鳎# 39;,,& # 39;e # 39;,, 12),,(& # 39;舌鳎# 39;,,& # 39;c # 39;,, 10),, (& # 39; c # 39;,, & # 39; e # 39;,, 1),,   ,,,,(& # 39;e # 39;,, & # 39; d # 39;,, 7)),   ,   ,# # node_map[我][j],存储我到j的最短距离,=,node_map  [[INF_val  for  val 拷贝xrange (len(节点))],for  val 拷贝xrange (len(节点))),   ,# # path_map[我][j]=j 表示我到j的最短路径是经过顶点j =,path_map  [[0, for  val 拷贝xrange (len(节点))],for  val 拷贝xrange (len(节点))),   ,,   ,# # set  node_map    ,set_node_map (node_map,时间节点,大敌;;node_list, path_map),   ,   ,   ,# # select  one  node 用obj 节点,如只A ——祝辞,D(节点[0],——祝辞,节点[3]),=,,from_node  node.index(& # 39;一个# 39;),=,,to_node  node.index (& # 39; e # 39;),=,,Floydpath  Floyd_Path (node_map,节点,还以为;path_map),=,,path  Floydpath (from_node, to_node),   null

python实现弗洛伊德算法的方法