【问题标题】:Shortest path between three points三点之间的最短路径
【发布时间】:2013-05-24 17:42:48
【问题描述】:

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

【问题讨论】:

  • 对不起,我不能给你更多,只有这个链接en.wikipedia.org/wiki/A*_search_algorithm,在这里你可以找到实现的例子。
  • 谢谢,但是检查点什么都没有,如果我先找到起点和检查点之间的最短路径,它可能会阻塞我的终点
  • 尝试用谷歌搜索“旅行推销员问题”,这是一个经典问题。
  • 所以我在整个图上运行 TSP,然后我知道哪个部分从开始到检查点以及从检查点到结束。然后我在每个部分上运行 BFS 来优化它?
  • 可以创建一个无法找到您描述的路径的图表。具有顶点切割 1 的图,其中起点和终点位于切割的一侧,检查点位于另一侧。例如。树有那个属性。

标签: graph shortest-path network-flow


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-03-04
    • 2018-09-18
    • 1970-01-01
    • 2017-02-06
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多