【问题标题】:Finding the shortest path between any two nodes belonging to two disjoint subsets of a graph找到属于图的两个不相交子集的任何两个节点之间的最短路径
【发布时间】:2012-03-31 07:29:16
【问题描述】:

有一个无向图,其中每个节点都被分配了某种颜色。我必须找到从任何蓝色节点到任何红色节点的最短路径。 (图形中也可能存在其他颜色,虽然没关系,但不知道有多少种颜色。)如何在多项式时间内做到?

【问题讨论】:

  • 我确信可以以某种方式使用 Dijkstra 算法来解决这个问题,但我无法弄清楚如何。

标签: algorithm graph graph-algorithm shortest-path


【解决方案1】:

作为提示,向图中添加两个新节点——分别称为 s 和 t。将 s 连接到成本为 0 的边的每个蓝色节点,将每个红色节点连接到成本为 0 的边的 t。然后找到从 s 到 t 的最短路径。

希望这会有所帮助!

【讨论】:

  • 多项式既用于添加 s 和 t 节点,也用于找到它们之间的最短路径(例如使用 Dijkstra),所以它是多项式。
  • @lbp 有很多简单的方法可以在多项式时间内解决它,你可以做 Floyd-Warshall 并找到最小距离的对(蓝色,红色)。你可以做 Dijkstra |red| * |蓝色|次,非常低效,并且仍然是多项式。但是这个答案提供了一种有效的方法,而不仅仅是多项式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 2011-03-08
  • 2023-01-15
  • 2015-06-12
  • 2023-04-10
相关资源
最近更新 更多