Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在有向图中查找节点数最大的路径_Algorithm_Graph - Fatal编程技术网

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。