Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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
Graph 有约束有向无环加权图的遍历_Graph_Directed Acyclic Graphs_Graph Traversal - Fatal编程技术网

Graph 有约束有向无环加权图的遍历

Graph 有约束有向无环加权图的遍历,graph,directed-acyclic-graphs,graph-traversal,Graph,Directed Acyclic Graphs,Graph Traversal,我有一个有向无环加权图,我想遍历它 有效解决方案路线的约束条件包括: 考虑到第二个约束,路线中经过的所有边的权重之和必须是图中可能的最高值 在所选路线中必须访问了N个顶点(包括起点和终点顶点) 通常,图形将具有大量的顶点和边,因此尝试所有可能性不是一个选项,并且需要相当高效的算法 正在为这个问题寻找一些指针或合适的算法。我知道使用Dijkstra算法很容易满足第一个条件,但我不知道如何合并第二个条件,甚至不知道从哪里开始查找 如果需要任何其他信息,请告诉我。我不确定您是否对图形中长度N的任何路径

我有一个有向无环加权图,我想遍历它

有效解决方案路线的约束条件包括:

  • 考虑到第二个约束,路线中经过的所有边的权重之和必须是图中可能的最高值
  • 在所选路线中必须访问了N个顶点(包括起点和终点顶点)
  • 通常,图形将具有大量的顶点和边,因此尝试所有可能性不是一个选项,并且需要相当高效的算法

    正在为这个问题寻找一些指针或合适的算法。我知道使用Dijkstra算法很容易满足第一个条件,但我不知道如何合并第二个条件,甚至不知道从哪里开始查找


    如果需要任何其他信息,请告诉我。

    我不确定您是否对图形中长度N的任何路径感兴趣,或者只对两个特定顶点之间的路径感兴趣;我怀疑是后者,但你在问题中没有提到这一限制

    如果是前者,那么解决方案应该是一个简单的类似Dijkstra的算法,在该算法中,您可以根据从边权重开始的潜在路径值对所有边进行排序,并通过已构建的相邻路径进行调整。在每次迭代中,取具有最佳潜在路径值的节点,并将其添加到相邻路径。当得到长度为N(或在两侧截断的长度更长)的路径时停止。还有一些其他技术细节,特别是wrt。创建长路径,但我不会详细介绍,因为我怀疑这不是您感兴趣的内容。:-)


    如果你有固定的源和汇,我认为没有什么深层魔法——只要运行一个基本的Dijkstra,路径将与添加到队列中的每个顶点相关联,但不要将路径长度>=N的顶点插入队列,也不要将汇插入队列,除非其路径长度为N。

    这是正确的,我只感兴趣的是两个集合顶点之间的精确N个顶点的长路径,对于该长度的路径,具有最高的边权重之和。:)今天晚些时候我会尝试你的建议,谢谢!