我有一个由最小生成树表示的边加权无向图。每个垂直由一个整数表示。MST如下所示:
我想知道,如何使用这个MST来找到从顶点x到顶点y的最短路径?假设我想找到从0到3的最短路径。很容易看到路径是0-2,2-3,总权重为0.26 0.17=0.43。但是我应该如何构造一个通用的方法来实现这一点?在伪码中
edge weight
6-2 0,40
4-5 0.35
5-7 0.28
2-3 0.17
0-2 0.26
1-7 0.19
0-7 0.16
MST不一定包含从一个顶点x到另一个向量y的最短路径。最小生成树是为要访问的每个节点找到最小路径的树。这并不一定意味着从x到y的最短路径包含在MST中。要找到从x到y的真正最短路径,您必须运行一个算法来找到原始图上的最短路径,就像Dijkstra的一样。
在这种情况下,由于给了你一个MST,你只知道图中的总边权重是最小的。然而,MST中两个节点之间的路径并不保证它是实际图上这两个节点之间的最小路径。为了找到从节点x到节点y的最小加权路径,可以对原始图(不是MST)执行Dijkstra算法。Dijkstra可以找到从一个起始节点(在本例中为x)到图中所有其他节点的最小距离。
执行Dijkstra算法如下,并将信息存储在表格中:
>
从起始节点(在本例中为 x)开始,然后转到 x 中权重最小的节点
从刚刚访问的最低权重节点开始,探索邻居并再次选择权重最低的边缘
从你正在访问的边缘算出总成本。如果你从x开始,然后访问a,然后访问c,找到从x到a到c的总距离。
如果节点的权重低于之前记录的值,请更新表中的值,因为现在找到了更短的路径。
最终,在执行此算法后,表应包含从x到y的最低权重路径。
给定一些无向边加权图,什么算法可以用来找到从某个顶点v到另一个顶点w的最短路径? 对于有向边加权图,可以使用Dijkstra的最短路径算法,但我使用的是无向图,所以它不起作用。 对于非边加权的图,可以使用广度优先搜索(BFS),但我使用的是边加权图,所以它不起作用。 既然它是无向和边加权的,一般最短路径法是什么?
我在找一个算法(或者其他什么方法)来确定一个给定的加权图在O(ElogV)中是否有唯一的MST(最小生成树)? 我对体重一无所知(如体重(e1)!= weight(e2)),如果该图只有一个唯一的MST,则算法返回True,否则返回False。 我首先使用 Kruskal 的算法,并检查 find-set(u)==find-set(v) 是否因此在 MST 中有一个圆圈,但这种方式并没有涵盖我认为
还在纠结递归。我有一个代码,它应该让我得到最少的操作,以便从x到y。只有乘以2或加+1,例如从7到12...它的5次操作,因为你需要+1次。我的代码对我来说没有正确的工作,我无法找出我缺少了什么来保证它是正确的。
假设我们有一个已知的最小生成树。 我们的任务是找到存在于每对顶点之间的路径的最大边缘。 举个例子, 我们有以下最小生成树: 在顶点1和2之间,我们有一个成本为10的边。在顶点1和3之间,我们有一个成本为5的边。在顶点3和4之间,我们有一个成本为4的边。 每个路径的最大边缘: 路径1-2:它只包含代价为10的边。所以答案是10。 路径1-3:它只包含代价为5的边缘。所以答案是5。 路径1-4:从顶点
在加权无向图中,我需要找到一个包含给定边“e”的最小生成树,如果可能的话。我该怎么做呢?Kruskal从“e”开始?
这是我的算法。 我做了一个。每次当我找到时,我都知道我得到了一个有向循环。 然后我将暂时沿着向后(直到我在循环中遍历所有顶点),并计算。 我的算法正确吗? 如果我的算法正确,时间复杂度是多少? 这个问题有没有更好的算法?