如何在有向图中找到节点数最多的路径呢?
我想我可以遍历每一个节点并深度搜索,以找出哪个路径具有最多的节点数,但我想知道是否有更好的方法。
注意:该图保证没有循环。
最长路径
。对于DAG,这个问题可以在多项式时间内解决。在这里阅读更多信息:维基百科。如果图中有环,则存在“无限长”的路径。
如果图是无环的: 您应该运行拓扑排序。然后:
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);
}
}
由于您的输入是有向图而不是有向无环图,因此它是NP-完全问题,所提到的解决方案不起作用。但正如logic_max所说:这是最长路径问题,您可以通过为每条边赋予成本一来减少它。