Graph 找到一条从顶点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 属于强连接组件,请执行以下操作 如下: 如果和,则将

设为有向图,设为红蓝边着色。设s,t为G中的顶点。找到一条从s到t的路径(如果存在),以便沿该路径的颜色变化数量最小

我已尽力做到以下几点:

  • 设为通过移除所有 G的蓝色边。设为得到的图 通过去除G的所有红色
  • 让 是的图形,经过计算 使用算法
  • 让我们做最后的决定吧 的图形,使用 算法
  • 给…的顶点着色 以红色显示,并为的顶点着色 蓝色的
  • 顺其自然 通过与合并得到的图
  • 定义每个(现有)的权重 G'中的边为0
  • 对于每一个这样的 属于强连通分量和v 属于强连接组件,请执行以下操作 如下:
    • 如果和,则将边添加到G'和 将其权重定义为1
  • 使用Dijkstra算法寻找最短路径 从s的蓝色强连接组件到 t的蓝色和红色强连通分量
  • 使用Dijkstra 从红色强连通区域寻找最短路径的算法 s的分量,与蓝色和红色都强连接 t
  • 让p表示四条路径中的最短路径 我刚刚发现。(也就是说,p具有最少数量的颜色替换)。p是一系列强连通分量。 使用DFS展开它们中的每一个,以在G中找到对应的路径

  • 该算法可以在O(E+V*log(V))中运行。它可以被改进或简化吗?

    我不完全理解您的算法,特别是在第4阶段,您将使用两种不同颜色的边为每个顶点着色—蓝色和红色…
    因此,我不会尝试改进您的算法,但会给出我自己的一个算法——时间为O(E+V)的BFS变体

    其思想是:迭代图形的边缘,并根据颜色切换的次数测量深度

    注意:我们将运行算法两次,首先假设路径的第一条边是红色,第二条假设路径的第一条边是蓝色,然后取最小值

  • 仅在红色边上运行BFS,从s开始(BFS队列中的第一个元素),如果查看蓝色边上的顶点,请将其保留在其他队列中
  • 用编号
    i
    标记您看到的所有节点(在开头
    i=0
  • 将蓝色边缘的队列作为主要队列
  • 运行阶段1至3,但切换颜色并将1添加到
    i

  • 最后,
    t
    中的数字是达到
    t
    的最小交换次数。谢谢,这显然比我的(确实复杂的)算法更简单、更有效:)