Algorithm 寻找属于图的两个不相交子集的任意两个节点之间的最短路径

Algorithm 寻找属于图的两个不相交子集的任意两个节点之间的最短路径,algorithm,graph,graph-algorithm,shortest-path,Algorithm,Graph,Graph Algorithm,Shortest Path,有一个无向图,其中每个节点都指定了某种颜色。我必须找到从任何蓝色节点到任何红色节点的最短路径。(其他颜色也可能存在于图形中,虽然这无关紧要,但不知道有多少颜色。)如何在多项式时间内完成此操作?作为提示,向图形中添加两个新节点-称它们为s和t。将s连接到边缘成本为0的每个蓝色节点,将每个红色节点连接到边缘成本为0的t。然后找到从s到t的最短路径 希望这有帮助 我确信Dijkstra算法可以以某种方式解决这个问题,但我还没有弄清楚如何解决。多项式用于添加s和t节点,以及寻找它们之间的最短路径(例如使

有一个无向图,其中每个节点都指定了某种颜色。我必须找到从任何蓝色节点到任何红色节点的最短路径。(其他颜色也可能存在于图形中,虽然这无关紧要,但不知道有多少颜色。)如何在多项式时间内完成此操作?

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


希望这有帮助

我确信Dijkstra算法可以以某种方式解决这个问题,但我还没有弄清楚如何解决。多项式用于添加s和t节点,以及寻找它们之间的最短路径(例如使用Dijkstra),所以它是多项式。@lbp在多项式时间内有很多简单的方法来解决它,你可以用Floyd Warshall找到最短距离的一对(蓝色,红色)。你可以做Dijkstra | red | | | blue |次,效率很低,但仍然是多项式。但这个答案提供了一个有效的方法,不仅仅是多项式。