给定有向未加权图G,V中的蓝色顶点B和(VB)中的黄色顶点y,我需要找到从给定源s到图中所有其他顶点的最短路径,而不访问访问蓝色顶点后的黄色顶点。换句话说,如果已经访问过蓝色顶点,则不允许访问黄色顶点(可能无法访问某些顶点)。
以下是我的想法:
稍微不同地运行BFS - 如果我们传递B中的顶点b,则不要继续搜索b的邻居。当BFS完成时,如果所有顶点都已标记,我们就完成了。否则:
在B中的每个b上运行BFS(b)。对于从b到y的每个路径,删除路径中的最后一个边。例如,BFS(b)找到路径b,s,y然后删除(s,y)。
运行BFS。
复杂性将是O(| B || E |),因为我们将运行BFS(b)| B |次。
我觉得这个解决方案并不是最好的,但这就是我想出来的。我错过了什么吗?
答案 0 :(得分:2)
考虑两个图表:
现在将A图中每个顶点(黄色除外)的有向边(零权重)添加到B图中对应的顶点。
计算从A图中的源到B图中的顶点的最短路径。
请注意,路径可以随时从A切换到B图形,但一旦切换,就无法返回!这意味着路径可以使用黄色顶点,但前提是它从未访问过蓝色节点。