三点之间的最短路径

时间:2013-05-24 17:42:49

标签: graph shortest-path network-flow

在图表中,我需要找到两点之间的最短路径,并且在路上访问一个检查点。此外,我只能访问每个顶点一次。我想它与网络流程有关,但我不知道如何实现它。

1 个答案:

答案 0 :(得分:0)

您可以将其完全建模为具有容量的多品种最小成本流问题。你想通过C从A到B,而不使用顶点两次。您可以将其建模为从A到C(商品1)的流程和从B到C(商品2)的流程。要避免节点被使用两次,您必须在所有节点上(在模型中)执行以下技巧:

给定具有p个入局和出局边的节点X,您将创建一个新节点Y并重新连接链接。 p个输入链路将全部到达X,q个输出边缘将全部离开Y.从X到Y仅添加1个链路(L)。通过将L链路的容量设置为1,每个节点将仅被使用一次。

然后,您可以将其写为(M)ILP并将其解决。如果ILP存在,ILP将为您提供正确的解决方案。根据您的应用程序,它可能有点过分。如果你想要一个快速启发式,只需使用2个A *搜索,并希望它们不重叠。