码迷,mamicode.com
首页 > 编程语言 > 详细

【算法日记】路径算法

时间:2017-07-14 00:37:28      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:alt   turn   长度   适合   pre   计算   color   one   art   

此算法适合带有负边权的和无负边权的有向图。算法会计算出所有可能的路径和每个路径的长度

 1 ways={
 2         "A":{
 3             "B":5,
 4             "C":2
 5         },
 6         "B":{
 7             "C":4
 8         },
 9         "C":{
10             "D":5,
11         },
12         "D":None
13     }
14 
15 def findWay(ways,start,end):
16 
17     wayList={}
18 
19     def search(string):
20         node=string[-1]
21         if ways[node]:
22             nodeList=ways[node].keys()
23             for item in nodeList:
24                 if item==end:
25                     wayList[string+item]=getValue(string+item)
26                 else:
27                     newPath=string+item
28                     search(newPath)
29 
30     def getValue(string):
31         l=len(string)
32         v=0
33         for i in range(l-1):
34             key1=string[i]
35             key2=string[i+1]
36             v+=int(ways[key1][key2])
37         return v
38 
39     for key in ways[start]:
40         new=start+key
41         search(new)
42     print wayList
43 
44 findWay(ways,"A","D")

输出:技术分享

 

负边权图:

 1 ways={
 2         "A":{
 3             "B":5,
 4             "C":2
 5         },
 6         "B":{
 7             "C":-4
 8         },
 9         "C":{
10             "D":5,
11         },
12         "D":None
13     }
14 
15 def findWay(ways,start,end):
16 
17     wayList={}
18 
19     def search(string):
20         node=string[-1]
21         if ways[node]:
22             nodeList=ways[node].keys()
23             for item in nodeList:
24                 if item==end:
25                     wayList[string+item]=getValue(string+item)
26                 else:
27                     newPath=string+item
28                     search(newPath)
29 
30     def getValue(string):
31         l=len(string)
32         v=0
33         for i in range(l-1):
34             key1=string[i]
35             key2=string[i+1]
36             v+=int(ways[key1][key2])
37         return v
38 
39     for key in ways[start]:
40         new=start+key
41         search(new)
42     print wayList
43 
44 findWay(ways,"A","D")

输出:

技术分享

 

【算法日记】路径算法

标签:alt   turn   长度   适合   pre   计算   color   one   art   

原文地址:http://www.cnblogs.com/zimuzimu/p/7163833.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!