设为有向图,设
为红色和蓝色的边缘着色。让 s,t 是 G 中的顶点。找到一条从 s 到 t 的路径(如果存在),使得沿着这条路径的颜色变化次数最少。
我试图做如下:
- 让
是通过去除 G 的所有蓝色边缘
得到的图。让 是通过去除 G 的所有红色边缘得到的图。
- 让
是 的强连通图
,使用该算法计算。
- 让
是 的 强连通图
,使用 该算法计算。
- 将 的顶点
着色为红色,将 的顶点着色为
蓝色。
- 设为与
合并得到的图。
- 将 G' 中每个(现有)边的权重定义为 0。
- 对于每个
这样的 u 属于强连通分量
,v 属于强连通分量
,请执行以下操作:
- 使用 Dijkstra 算法找到从 s 的蓝色强连通分量到 t 的蓝色和红色强连通分量的最短路径。
- 使用 Dijkstra 算法找到从 s 的红色强连通分量到 t 的蓝色和红色强连通分量的最短路径。
- 让 p 表示我们刚刚找到的四个路径中的最短路径。(即,p 具有最少数量的颜色替代)。p 是一系列强连通分量。使用 DFS 展开它们中的每一个,以在 G 中找到相应的路径。
该算法可以在 O(E+V*log(v)) 中运行。可以改进或简化吗?