【发布时间】:2020-11-01 22:34:44
【问题描述】:
让 是有向图,让 是红色和蓝色的边缘着色。让 s,t 是 G 中的顶点。找到一条从 s 到 t(如果存在)的路径,使得沿着这条路径的颜色变化次数最少。
我尝试过如下操作:
- 设为去掉所有 G 的蓝色边。设 为得到的图 通过去除所有红色的 G。
- 让 是 的strongly connected 图,计算 使用this 算法。
- 让 成为 strongly connected 的图,使用计算 this算法。
- 为顶点着色 为红色,并为顶点着色 蓝色。
- 让成为 将与合并得到的图形 。
- 定义每个(现有)的重量 G' 中的边为 0。
- 对于每个,这样你 属于强连通分量和v 属于强连通分量 do as 如下:
- 使用 Dijkstra 算法找到最短的 从 s 的蓝色强连通分量到两者的路径 t 的蓝色和红色强连通分量。
- 使用 Dijkstra 从红色强连接中找到最短路径的算法 s 的分量,与蓝色和红色都强连接 t 的组成部分。
- 令 p 表示四个我们之间的最短路径 刚刚发现。 (即,p 具有最少数量的颜色替代)。 p 是一系列强连通分量。 使用 DFS 展开它们中的每一个,以在 G 中找到对应的路径。
这个算法可以在 O(E+V*log(v)) 中运行。可以改进或简化吗?
【问题讨论】:
标签: graph depth-first-search dijkstra graph-coloring strongly-connected-graph