gpt4 book ai didi

algorithm - 如何在一次迭代中计算DFS中有向加权图路径的总权重?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:19:42 31 4
gpt4 key购买 nike

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)

picture

我使用 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/

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