找到最短路径而不经过特定顶点

时间:2013-11-18 13:37:29

标签: algorithm graph shortest-path breadth-first-search

给定有向未加权图G,V中的蓝色顶点B和(VB)中的黄色顶点y,我需要找到从给定源s到图中所有其他顶点的最短路径,而不访问访问蓝色顶点后的黄色顶点。换句话说,如果已经访问过蓝色顶点,则不允许访问黄色顶点(可能无法访问某些顶点)。

以下是我的想法:

  1. 稍微不同地运行BFS - 如果我们传递B中的顶点b,则不要继续搜索b的邻居。当BFS完成时,如果所有顶点都已标记,我们就完成了。否则:

  2. 在B中的每个b上运行BFS(b)。对于从b到y的每个路径,删除路径中的最后一个边。例如,BFS(b)找到路径b,s,y然后删除(s,y)。

  3. 运行BFS。

  4. 复杂性将是O(| B || E |),因为我们将运行BFS(b)| B |次。

    我觉得这个解决方案并不是最好的,但这就是我想出来的。我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

考虑两个图表:

  1. A图包含除蓝色顶点之外的所有顶点和边
  2. B图包含除黄色顶点外的所有顶点和边
  3. 现在将A图中每个顶点(黄色除外)的有向边(零权重)添加到B图中对应的顶点。

    计算从A图中的源到B图中的顶点的最短路径。

    请注意,路径可以随时从A切换到B图形,但一旦切换,就无法返回!这意味着路径可以使用黄色顶点,但前提是它从未访问过蓝色节点。