介绍
小编给大家分享一下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), nullpython实现弗洛伊德算法的方法