在有向图中查找具有最大节点数的路径

时间:2012-03-29 14:39:48

标签: algorithm graph

在有向图中找到具有最大节点数的路径的好方法是什么?

我想我可以深入遍历每个节点的图形并找出哪条路径的节点数最多,但是我想知道是否有更好的方法。

提及:图表保证没有周期。

3 个答案:

答案 0 :(得分:4)

您有一个有向无环图(DAG),并且您希望找到具有最大节点数的路径。这实际上是在DAG中找到longest path

此问题可在多项式时间内解决。在此处阅读更多相关信息: - Wikipedia.

答案 1 :(得分:2)

如果图形有一个循环,则存在“无限”长度路径。

如果图形是非循环的: 你应该运行拓扑排序。然后:

foreach(node in topological_sort_order) {
   foreach(prev_node in neibhours[node]) {
      // there is edge from prev_node to node
      // since vertices are sorted in topological order than
      // value for longest_path[prev_node] is already computed
      longest_path[node] = max(longest_path[node],  longest_path[prev_node] + 1);
   }
}

答案 2 :(得分:0)

由于您的输入是定向图而非定向非循环图,因此它是NP完全的,并且提到的解决方案不起作用。但正如logic_max所说:这是最长的路径问题,你通过给每个边缘一个成本来减少这个问题。