Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 边锁定和边解锁的无向图的最小路径_Algorithm_Data Structures_Graph_Graph Theory_Graph Algorithm - Fatal编程技术网

Algorithm 边锁定和边解锁的无向图的最小路径

Algorithm 边锁定和边解锁的无向图的最小路径,algorithm,data-structures,graph,graph-theory,graph-algorithm,Algorithm,Data Structures,Graph,Graph Theory,Graph Algorithm,给定具有正权重的无向图,有两种边:锁定边和解锁边。确定给定边是锁定边还是解锁边需要O(1) 对于给定的两个顶点s、t和正数k=O(1),如何找到s和t之间最多包含k条锁定边的最短路径 对于给定的两个顶点s,t和一个正数k=O(1),如何找到s和t之间的最短路径,其中包含确切的k锁定边 我不知道如何在这个图上运行Dijkstra算法来找到给定顶点之间的最短路径,以及如何将无向图转换为有向图。你可以通过复制k图来解决这两个问题,比如G_0,…,G_k,修改每个图,使G_i中的锁定边vw变成G_i中的

给定具有正权重的无向图,有两种边:锁定边和解锁边。确定给定边是锁定边还是解锁边需要O(1)

  • 对于给定的两个顶点s、t和正数k=O(1),如何找到s和t之间最多包含k条锁定边的最短路径

  • 对于给定的两个顶点s,t和一个正数k=O(1),如何找到s和t之间的最短路径,其中包含确切的k锁定边


  • 我不知道如何在这个图上运行Dijkstra算法来找到给定顶点之间的最短路径,以及如何将无向图转换为有向图。

    你可以通过复制
    k
    图来解决这两个问题,比如G_0,…,G_k,修改每个图,使G_i中的锁定边vw变成G_i中的u到G_{i+1}中的v,以及G_i中的v到G_{i+1}中的u的边。然后,您可以在G_0中从根目录执行单源最短路径。第二个查询是通过读取到目标的距离(单位为G_k)来解决的,而第一个查询是通过读取到目标的任何G_i中的最小距离来解决的。

    路径是否允许包含循环?或者这些是简单的路径?将锁视为权重。如果是锁定边缘,则其重量为1000。这应该可以简化它。(顺便说一句-漂亮的Supaplex图标!):-)@templatetypedef谢谢你那么,如果u连接到v,v连接到u,为什么我要复制整个图(或者只是顶点?)k次,并将其转换为有向图?那么“未锁定”的边缘呢?对不起,我还没有完全得到你的解决方案…我想定义一个初始化为k的计数器,并在dijkstra算法中每次发现锁定边缘时减小。此解决方案有任何问题吗?您将不使用未锁定的边。也就是说,对于每个i,u和v之间的未锁定边将成为G_i中从u到v的边和从v到u的另一条边。您提出的解决方案的问题是,如果存在任何锁定边,它根本不起作用。拿一个正方形加一条对角线。锁定正方形和对角线的底面,并给每个边加1的重量。不使用任何锁定边就可以从左下角到右上角,但您的解决方案无法解决这一问题。好的,我想我知道了,但您能否解释一下有关查询的更多信息?我有k个图G_0,…,G_k,并运行Dijkstra算法来寻找从u到v的最短路径,我现在应该怎么做?请注意,在第二个查询中,从u到v的路径正好包含K个锁定边,可能包含同一个锁定边超过1次。。