gpt4 book ai didi

python实现Floyd算法

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 31 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python实现Floyd算法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

下面是用Python实现Floyd算法的代码,供大家参考,具体内容如下 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# -*- 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'] 。

原文链接:http://blog.csdn.net/u011285477/article/details/75096303 。

最后此篇关于python实现Floyd算法的文章就讲到这里了,如果你想了解更多关于python实现Floyd算法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com