computer-science - 彩边图中的最短路径

标签 computer-science graph-theory graph-algorithm

在无向连通图中,每条边都有一种颜色(红色、绿色或蓝色)。
有效路径是至少具有每种颜色的一条边的路径。
问题是如何找到最短的有效路径或确定不存在。

我尝试使用 BFS 但无法找到解决方案。
关于如何开始有什么想法吗?

最佳答案

首先,我假设颜色数量是固定的。 然后我会提出一个标签设置 Dijkstra 算法(与 Pareto Dijkstra 相比),其运行时间为 O(n log(n) + m):

使用广义 Dijkstra 来查找最短路径: 每个节点都有一个标签列表,一个标签由起始节点的长度和尚未访问的所有颜色组成。 如果 (1) 它的长度较小并且 (2) 它包含另一个标签的所有颜色,则一个标签在该节点中占主导地位。被支配的标签直接被移除。 与 dijkstra 类似,您维护一个优先级队列,从中您始终可以放松长度较小的节点。取一条边到节点 v 将使标签的长度增加 endge 长度,并将边的颜色添加到标签中。该标签被添加到节点 v 的标签列表中。 当使用包含所有三种颜色的标签确定目标节点时,您已经找到了最短路径。 注意,如果要重构最后的最短路径,必须保存每个标签的前驱节点。

您从起始节点处的初始标签开始,其中包含 (0,{})(零长度且无颜色)。

每个节点对于每个颜色集组合最多可以结算一次,因为这种情况下只存在 8 个(固定)这样的组合,运行时间等于 Dijkstra 算法 最佳实现时间为 O(n*log(n)+m)。

关于computer-science - 彩边图中的最短路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5370902/

相关文章:

c - pthread_mutex_lock() 和 pthread_mutex_unlock() 的作用是什么?

c - 寻找一组字符

video - 作为开发人员,哪些演讲/视频吸引了您?

algorithm - 两个网络图的并集

python - 有没有办法在 Neo4j 或 NetworkX 中找到图的中心?

algorithm - 是否有任何有效的算法可以找到无向图中最长循环的长度?

algorithm - SiftDown 算法比较次数

algorithm - 将网络建模为有向图

java - 难以实现 BFS 以遍历图

image-processing - 在自动对焦算法中找到焦点的最短方法