最短路径上的变化(复杂?)

时间:2011-12-04 12:02:39

标签: optimization graph path shortest

我有以下问题。给定有向图G =(V,E),在所有边{i,j}之间具有边缘成本cij。我们有多个来源,比如s1,...,sk和一个目标,比如t。问题是找到从s1,... sk到t的最低组合成本,其中所有不同路径的访问顶点的总量是M.(源和目标不计为访问顶点,0< = M< = | V | -k + 1,所以如果M = 0,所有路径都直接从源到目标。)

我想出了以下内容,但尚未找到解决方案。

  1. 问题类似于多个目标(t1,...,tk)和一个源,只需反转所有边并制作源目标和目标源。我认为这可能是有用的,例如Dijkstra计算从图中的一个源到所有其他顶点的最短路径。

  2. 只需一个目标和一个源,就可以找到最长路径。使用Bellman Ford算法访问的顶点M的数量。这是通过迭代地增加访问顶点的数量来完成的。

  3. 对于小k,找到从顶点v1,...,vk必须访问的从一个源到一个目标的最短路径的问题可以解决如下: i)计算所有顶点之间的最短路径。 ii)检查哪个k!排列是最短的。 我认为这在将我的调整问题1)转换为从一个源到一个“超级目标”的问题时非常有用,强制访问“旧”目标t1 = v1,...,tk = vk。 / p>

  4. 不幸的是,组合1,2和3并不能提供解决方案,但它可能有所帮助。有谁知道解决方案?这可以有效地解决吗?

1 个答案:

答案 0 :(得分:1)

为什么不为每个s做​​一个单独的Dijkstra,然后总结成本呢?

类似的东西:

float totalCost;
for (int i=0; i<k; i++)
  totalCost += Dijkstra(myGraph,s[i],t);

我希望我能正确理解这个问题。