Algorithm 在有向图中查找节点数最大的路径
在有向图中找到节点数最多的路径的好方法是什么 我想我可以深入遍历每个节点的图,找出哪个路径有最多的节点,但是我想知道是否有更好的方法Algorithm 在有向图中查找节点数最大的路径,algorithm,graph,Algorithm,Graph,在有向图中找到节点数最多的路径的好方法是什么 我想我可以深入遍历每个节点的图,找出哪个路径有最多的节点,但是我想知道是否有更好的方法 注意:该图保证没有循环。您有一个有向无环图(DAG),并且希望找到节点数最大的路径。这实际上是在DAG中查找最长路径 这个问题对于DAG是多项式时间可解的。请在此处阅读更多信息:-如果图形有一个循环,则存在“无限”长路径 如果图是非循环的: 您应该运行拓扑排序。然后: foreach(node in topological_sort_order) { for
注意:该图保证没有循环。您有一个有向无环图(DAG),并且希望找到节点数最大的路径。这实际上是在DAG中查找
最长路径
这个问题对于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所说:这是一个最长路径问题,你可以通过给每条边一个代价来减少这个问题 你的意思是你想要一个算法来解决这个问题?你的图形是一棵树。嗯,差不多……:)谢谢你的提示。最后,我用Floyd Warshall的算法解决了这个问题,其中每条边的权重为-1。