Graph 找到一条从顶点s到顶点t的路径,使用最少数量的颜色替换
设为有向图,设为红蓝边着色。设s,t为G中的顶点。找到一条从s到t的路径(如果存在),以便沿该路径的颜色变化数量最小 我已尽力做到以下几点:Graph 找到一条从顶点s到顶点t的路径,使用最少数量的颜色替换,graph,depth-first-search,dijkstra,graph-coloring,strongly-connected-graph,Graph,Depth First Search,Dijkstra,Graph Coloring,Strongly Connected Graph,设为有向图,设为红蓝边着色。设s,t为G中的顶点。找到一条从s到t的路径(如果存在),以便沿该路径的颜色变化数量最小 我已尽力做到以下几点: 设为通过移除所有 G的蓝色边。设为得到的图 通过去除G的所有红色 让 是的图形,经过计算 使用算法 让我们做最后的决定吧 的图形,使用 算法 给…的顶点着色 以红色显示,并为的顶点着色 蓝色的 顺其自然 通过与合并得到的图 定义每个(现有)的权重 G'中的边为0 对于每一个这样的 属于强连通分量和v 属于强连接组件,请执行以下操作 如下: 如果和,则将
- 如果和,则将边添加到G'和 将其权重定义为1
该算法可以在O(E+V*log(V))中运行。它可以被改进或简化吗?我不完全理解您的算法,特别是在第4阶段,您将使用两种不同颜色的边为每个顶点着色—蓝色和红色…
因此,我不会尝试改进您的算法,但会给出我自己的一个算法——时间为O(E+V)的BFS变体 其思想是:迭代图形的边缘,并根据颜色切换的次数测量深度 注意:我们将运行算法两次,首先假设路径的第一条边是红色,第二条假设路径的第一条边是蓝色,然后取最小值
i
标记您看到的所有节点(在开头i=0
)i
最后,
t
中的数字是达到t
的最小交换次数。谢谢,这显然比我的(确实复杂的)算法更简单、更有效:)