在有向图中找到具有最大节点数的路径的好方法是什么?
我想我可以深入遍历每个节点的图形并找出哪条路径的节点数最多,但是我想知道是否有更好的方法。
提及:图表保证没有周期。
答案 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所说:这是最长的路径问题,你通过给每个边缘一个成本来减少这个问题。