【发布时间】:2018-01-22 19:45:55
【问题描述】:
有一个有向图(可能包含循环),每个节点都有一个值,我们如何获得每个节点的可达值之和。例如,在下图中:
节点 1 的可达和为:2 + 3 + 4 + 5 + 6 + 7 = 27
节点 2 的可达和为:4 + 5 + 6 + 7 = 22
.....
我的解决方案:要得到所有节点的总和,我认为时间复杂度是O(n + m),n是节点数,m代表边数。应该使用DFS,对于每个节点我们应该使用递归的方法找到它的子节点,并在完成计算时保存子节点的总和,这样以后我们就不需要再计算了。需要为每个节点创建一个集合,避免循环导致的无休止计算。
有效吗?我认为它不够优雅,尤其是必须创建许多集合。有没有更好的解决方案?谢谢。
【问题讨论】:
-
感谢@Prune,但我说的是有向图而不是 DAG。
-
在那种情况下,算法非常相似;您只需保留访问过的节点列表,以过滤您添加到“未完成”列表中的内容。
标签: algorithm graph directed-graph