当前位置: 首页 > 知识库问答 >
问题:

带色边图中最小修改次数的路径

夔宏深
2023-03-14

我有一个带彩色边(红色和蓝色)的有向图,它可能包含循环。问题是编写一个给定两个顶点(s,t)的算法,该算法找到s和t之间颜色变化次数最小的路径(如果存在这样的路径)。

我用Dijkstra的一个变体找到了一个解决方案(我创建了一个新图,其中每个顶点对应于前一个图的一条边,并且包含该边的颜色。例如:如果(1,2)是旧图中的一条边,那么(1/2)是新图中的一个顶点。我连接了“相邻边”的顶点,新图中改变颜色的边得到一个权重1,其中相同的颜色转换为0)。

我在寻找(V和E的)线性时间的解。上面的一个在新的图形中使用了VxE边。

有没有这样的解可以找到最小路?

共有1个答案

江仲渊
2023-03-14

第一阶段:简化为最短路径问题。

  1. 对于每个节点i我们创建两个节点i_redi_blue
  2. 对于每个蓝色边i->j我们创建两个边i_red->j_blue和两个边i_blue->j_blue(权重1i_blue->j_blue(权重0
  3. 我们以类似的方式处理红边。
  4. 我们还需要一个与start_redstart_blue连接的起始节点,连接权重为0
  5. 类似于目标节点,该节点与target_redtarget_blue连接,具有权重0-连接。

现在,搜索从新创建的起始节点到新创建的目标节点的最短路径。有两倍于原始图中的节点和两倍于原始图中的边,因此缩减是线性的。

将问题简化为最短路径搜索后,可以执行以下操作:

>

  • 步骤:只使用权重为0的边,将图视为无向图,在bfs的帮助下,可以在线性时间内找到该0边图中的所有分量。

    步骤:在图上运行bfs,在图上前面步骤的组件作为超级节点粘在一起,因此所有边都有权重1,并且bfs将找到最短路径。

    显然,该算法的三个部分(0边图中的bfs、将组件粘附到超级节点以及结果图中的bfs)都在线性时间内运行。

  •  类似资料:
    • 给定一个带正权的无向图,有2种边:锁定边和未锁定边。确定给定边沿是锁定边沿还是未锁定边沿需要O(1)。 > 对于给定的两个顶点s,t和一个正数k=O(1),我如何找到s和t之间最多包含k条锁定边的最短路径? 对于给定的两个顶点s,t和一个正数k=O(1),我如何找到s和t之间恰好包含k条锁定边的最短路径? 我不知道如何在这个图上运行Dijkstra算法来找到给定顶点之间的最短路径,以及如何将无向图

    • 我试图解决的问题是: 给出一个图,其中每个边都用红色或蓝色着色: a)给出了生成两顶点(s,t)之间经过最小数量红边的路径的算法。

    • 更新边命令用于更新当前数据库中的边记录。 这与实际更新命令等效,除了检查和维护与顶点的图一致性外,还更新和属性。 以下语句是更新边命令的基本语法。 以下是有关上述语法中选项的详细信息。 - 定义您想要更新的边。 您可以选择按类别更新边的类,按簇更新边的簇,使用前缀或按记录ID更新边的记录ID。 - 将字段更新为给定的值。 - 增加给定字段的值。 - 定义要添加到字段集合的项目。 - 定义要从一组字

    • 无向图有n个顶点和0条边。我们能画出的最大边数是多少,这样图形就保持断开连接。 我已经给出了一个解决方案,我们可以排除一个顶点,并且可以找到无向图的n-1个顶点之间的最大边数,这样图仍然保持不连通。 对于n个顶点为n(n-1)/2,对于n-1个顶点为(n-1)(n-2)/2。有更好的解决办法吗?

    • 以下是消费税: 在某些图的问题中,顶点可以有权代替边的权或增加边的权。设Cv是顶点v的代价,C(x,y)是边(x,y)的代价。该问题涉及到在图G中寻找顶点a和顶点b之间的最便宜路径,路径的代价是该路径上遇到的边和顶点的代价之和。 (a)假设图中每条边的权重为零(而非边的代价为∞),假设所有顶点1≤V≤n(即所有顶点的代价相同),Cv=1。给出一个求从a到b最便宜路径的高效算法及其时间复杂度。 (b

    • 接口说明 修改角色 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /permissions/api/team/role/v1.0.0/update 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN roleId string formData