【问题标题】:Find the shortest path in a graph with dynamic weight在具有动态权重的图中找到最短路径
【发布时间】:2013-05-27 09:54:50
【问题描述】:

我有以下场景:

我想找两个城市之间的航班:A 和 B。没有从 A 到 B 的直飞航班;所以,我需要找到一个成本最低的中转航班。

另外,机票不是固定的。这取决于我购买它的时间;例如,如果我早点购买,价格会更便宜。

另外,时间也会影响飞行;例如,5 月 31 日早上 7 点从 C 到 D 只有一班航班。如果飞机在 5 月 31 日早上 8 点从 A 飞到 C,我会错过航班。出于这个原因,我将城市表示为图的顶点。如果存在从 A 到 B 的有效航班,则路径 AB 存在。重量将是机票费用。

对我的问题有什么想法或建议吗?

谢谢

【问题讨论】:

  • 听起来是一个相当简单的A* 问题(显然,您还必须保留每个城市的到达日期),但您不仅要保留到给定城市的最佳路径,还可以保留所有路径(尽管您可以删除那些都较晚到达并且比另一条路径更昂贵的路径)。
  • Related question,虽然它减少了天数而不是成本。

标签: algorithm graph graph-algorithm shortest-path


【解决方案1】:

我回答过一次非常similar question 我很确定在这里可以使用相同的想法。我们的想法是使用一种路由算法,专为互联网路由器设计——这些路由器是动态且不断变化的。为其设计的算法是Distance Vector Routing Protocol

建议的实现基本上是 Bellman-Ford 算法的分布式版本,一旦每条边的权重发生变化,它就会自行修改,以获得新的最优路径。

请注意,该算法有缺点,主要是count to infinity problem

【讨论】:

    【解决方案2】:

    处理在正确时间不在正确位置的通常方法是使节点代表特定时间的特定位置。然后从 C 到 D 的航班于 5 月 30 日晚上 9 点起飞并在 5 月 31 日早上 7 点到达,对应于从节点 C_May30_9PM 到 D_May31_7AM 的弧线。您还需要与等待相对应的弧线,例如 D_May31_7AM 到 D_May31_8AM。

    我不确定你描述的详细程度关于购买门票有什么要说的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 2016-06-25
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多