Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何在一次迭代中计算DFS中有向加权图路径的总权重?_Algorithm_Graph Algorithm_Graph Theory_Depth First Search - Fatal编程技术网

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

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(

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
....
....
其中,路径的总权重是路径中每条边的权重之和。
当然,在得到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
存储到该路径中,因此不需要每次都计算它

请注意,如果使用不同的路径再次访问节点,则需要“计算”新的权重