作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
G = (V,E) - 有向加权图。
D -> G (w:4)
D -> C (w:2)
D -> E (w:2)
C -> F (w:5)
C -> A (w:4)
B -> D (w:3)
B -> E (w:10)
G -> F (w:1)
E -> G (w:6)
A -> D (w:1)
A -> B (w:2)
我使用 DFS 查找 START=A 节点到 END=F 节点之间的所有简单路径:
def find_all_paths(self, start, end, path=[]):
path = path + [start]
if start == end:
return [path]
if start not in self.edges:
return []
paths = []
for node in self.edges[start]:
if node not in path:
paths.extend(self.find_all_paths(node, end, path))
return paths
结果:
['A', 'D', 'G', 'F']
['A', 'D', 'C', 'F']
['A', 'D', 'E', 'G', 'F']
['A', 'B', 'D', 'G', 'F']
['A', 'B', 'D', 'C', 'F']
['A', 'B', 'D', 'E', 'G', 'F']
['A', 'B', 'E', 'G', 'F']
我需要得到这样的结果:
['A', 'D', 'G', 'F'], TOTAL_WEIGHT_OF_PATH = 6
['A', 'D', 'C', 'F'], TOTAL_WEIGHT_OF_PATH = 8
['A', 'D', 'E', 'G', 'F'], TOTAL_WEIGHT_OF_PATH = 10
....
....
其中 TOTAL_WEIGHT_OF_PATH 是路径中每条边的权重总和。当然,我可以在获得 DFS 结果后计算 TOTAL_WEIGHT_OF_PATH 值,但我需要将其计算到 DFS 步长中,以便在基于 TOTAL_WEIGHT_OF_PATH 的条件下进行截止搜索(例如,TOTAL_WEIGHT_OF_PATH 应为 < MAX_WEIGHT_OF_PATH)
最佳答案
好吧,注意 TOTAL_WEIGT_OF_PATH
(TWOP
) 到任何节点 V(除了根)是 TWOP
到前面的节点 U加上边的权重 (U,V)。 TWOP
到 root 是 0。
TWOP<sub>V</sub> = TWOP<sub>U</sub> + weight(U,V)
任何时候你在一条路径上扩展一个新的节点,你只需要将这个节点的TWOP
存入其中,所以你不需要每次都计算它。
请注意,如果您再次访问一个节点,使用不同的路径,您需要“计算”一个新的权重。
关于algorithm - 如何在一次迭代中计算DFS中有向加权图路径的总权重?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36771682/
我是一名优秀的程序员,十分优秀!