给定一个有向无权图G,V中有一个蓝色顶点集B和一个黄色顶点y在(V-B)中,我需要找到从给定源s到图中所有其他顶点的最短路径,在访问蓝色顶点后不访问黄色顶点。换句话说,如果已经访问了蓝色顶点,则不允许访问黄色顶点(有些顶点可能无法到达)。
我的想法如下:
1. 以稍微不同的方式运行BFS(s)- 如果我们通过在B中的顶点b,不继续搜索b的邻居。当BFS完成时,如果已标记所有顶点,则我们完成。否则:
2. 在B中的每个b上运行BFS(b)。对于从b到y的每条路径,删除路径中的最后一条边。例如,BFS(b)发现路径b,s,y然后删除(s,y)。
3. 运行BFS(s)。
时间复杂度将是O(|B|*|E|),因为我们将运行BFS(b)|B|次。
我觉得这个解决方案可能不是最好的,但这就是我想出来的。我有遗漏什么吗?
我的想法如下:
1. 以稍微不同的方式运行BFS(s)- 如果我们通过在B中的顶点b,不继续搜索b的邻居。当BFS完成时,如果已标记所有顶点,则我们完成。否则:
2. 在B中的每个b上运行BFS(b)。对于从b到y的每条路径,删除路径中的最后一条边。例如,BFS(b)发现路径b,s,y然后删除(s,y)。
3. 运行BFS(s)。
时间复杂度将是O(|B|*|E|),因为我们将运行BFS(b)|B|次。
我觉得这个解决方案可能不是最好的,但这就是我想出来的。我有遗漏什么吗?
s
经过y
的路径,因此这种方法不正确。即使您完全删除y
,您的算法仍将无法处理像这样的图形。您需要采用完全不同的方法。 - BlueRaja - Danny Pflughoeft