Algorithm 如何在一次迭代中计算DFS中有向加权图路径的总权重?
G=(V,E)-一个有向加权图Algorithm 如何在一次迭代中计算DFS中有向加权图路径的总权重?,algorithm,graph-algorithm,graph-theory,depth-first-search,Algorithm,Graph Algorithm,Graph Theory,Depth First Search,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(
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
....
....
其中,路径的总权重是路径中每条边的权重之和。
当然,在得到DFS的结果后,我可以只计算路径值的总权重,但我需要将其计算到DFS步骤中,以便根据路径的总权重(例如,路径的总权重应该是路径的最大权重)注意,
路径的总权重(TWOP
)到任何节点V(除根外)与前一个节点U的TWOP
加上边的权重(U,V)。TWOP
与根的TWOP
为0
TWOP<sub>V</sub> = TWOP<sub>U</sub> + weight(U,V)
TWOPV=TWOPU+重量(U,V)
每当您在路径上展开一个新节点时,您只需要将该节点的TWOP
存储到该路径中,因此不需要每次都计算它
请注意,如果您再次访问一个节点,使用不同的路径,您需要“计算”一个新的权重。好的,请注意,到任何节点V(除根节点外)的路径(TWOP
)的TWOP
到前面的节点U加上边的权重(U,V)。TWOP
到根节点的权重为0
TWOP<sub>V</sub> = TWOP<sub>U</sub> + weight(U,V)
TWOPV=TWOPU+重量(U,V)
每当您在路径上展开一个新节点时,您只需要将该节点的TWOP
存储到该路径中,因此不需要每次都计算它
请注意,如果使用不同的路径再次访问节点,则需要“计算”新的权重