在具有x个红色顶点的2个顶点之间查找路径

时间:2013-04-13 12:07:36

标签: algorithm graph directed-graph

我尝试了几种方法,但它们都以死胡同结束。 问题是:

给定G =(V,E)有向未加权图,其中每个顶点都用红色或蓝色着色。 让来自V的顶点为s和t。描述一种算法,该算法可以找到s和t之间的路径,该路径将保持最少的红色顶点。解释算法,证明并显示其复杂性。

我想到了两种方法并放弃了两种方法:

  1. 使用按颜色排序的邻接列表(蓝色第一个红色最后一个)并运行DFS - 坏主意
  2. 将每个边缘的重量从红色顶点设置为2,将蓝色设置为1并运行Dijkstra - 找到一个反例
  3. 我真的很乐意为正确的方向寻求帮助。我不想得到完整的答案,而是点击/提示。

2 个答案:

答案 0 :(得分:0)

考虑为任何到达红色顶点的边设置权重= 1。然后显示具有 n 红色顶点的s的路径的成本是 n n-1 ,具体取决于s的颜色。

答案 1 :(得分:0)

我已经找到了这个问题的答案,而不是我,而是我的朋友,因为我向他展示了加权的方式。

我们将使用2个队列,而不是在BFS算法中使用一个队列:一个用于蓝色顶点,一个用于红色顶点。

我们检查S是什么颜色并将其添加到正确的队列中,只要蓝色顶点的队列不为空我们就从它出列并继续常规BFS如果我们遇到一个红色顶点我们将它排入红色队列如果我们找到一个蓝色顶点,我们将它排入蓝色队列。 如果蓝色队列为空,我们从红色队列中出队。

最终数组pi [| V |]将向顶点v保持向后表示,其中最少有红色顶点。

由于BFS算法没有真正的变化,而且它的数据结构没有真正的变化,正确性证明成立,时间复杂度为O(| V | + | E |),如BFS。

感谢帮助人员!