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

带锁边和不带锁边的无向图的最小路

赫连坚
2023-03-14

给定一个带正权的无向图,有2种边:锁定边和未锁定边。确定给定边沿是锁定边沿还是未锁定边沿需要O(1)。

>

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

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

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

  • 共有1个答案

    缪嘉志
    2023-03-14

    您可以通过获取图的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中到目标的最小距离来解决的。

     类似资料:
    • 我有一个带彩色边(红色和蓝色)的有向图,它可能包含循环。问题是编写一个给定两个顶点(s,t)的算法,该算法找到s和t之间颜色变化次数最小的路径(如果存在这样的路径)。 我用Dijkstra的一个变体找到了一个解决方案(我创建了一个新图,其中每个顶点对应于前一个图的一条边,并且包含该边的颜色。例如:如果(1,2)是旧图中的一条边,那么(1/2)是新图中的一个顶点。我连接了“相邻边”的顶点,新图中改变

    • 尝试从线程通知时出现死锁。 以下是我的MCVE: 如果使用,则每次尝试都要编写,这里没有问题。 如果使用循环,我会看到正在编写几次尝试,然后在某个时刻,我会得到一个死锁,等待最终永远不会结束: 我在创建线程之前锁定互斥体 则线程无法在到达之前通知(然后解锁互斥体) 在循环中,如果出现超时,重新锁定互斥体,因此无法执行notifice,则打印“Witting...”并且当我们再次准备好接收通知时释放

    • 以下是约书亚的有效Java摘录: 如果在内部同步类,可以使用各种技术来实现高并发性,例如锁拆分、锁条带化和非阻塞并发控制。 上面提到的锁拆分和锁条化是两种不同的技术,但当我试图找出它们之间的区别时,却找不到区别。 它们之间是有区别还是相同?

    • 我不确定如何处理这个问题。 给定一个无向图,每条边的颜色要么是红色,要么是蓝色。如何在时间复杂度(O(m+n)log n)中找到包含尽可能少的红边的最小生成树。其中m个顶点和n个边。 任何帮助都将不胜感激。

    • 在一个已执行DFS的无向图中(为了生成一个DFS树,从而将每条边分类为树边或后边),图中是否存在仅由后边组成的循环,即没有树边?

    • 我在使用bootstrap时遇到了一个CSS问题。我还将Angular JS与Angular UI.bootstrap一起使用(这可能是问题的一部分)。 我正在制作一个在表格中显示数据的网站。有时,数据包含我必须在表中显示的对象。因此,我想将无边框表放在普通表中,同时为无边框表保留内部分隔线。 但似乎即使我特别说不要在一张桌子上显示边框,也是被迫的: HTML: CSS: 所以这里,我想要的只是内