对最小生成树算法的理解

刚看完书里讲最小生成树的prim方法,赶紧写下来,省得过后忘了。


Prim算法】:

对最小生成树算法的理解_第1张图片

就拿这个图举例子,假设从V0开始走。

1. 从起点V0开始,我们的分支只有V0,那就看跟V0连接的线,权值都多少。选个最少的,没错,是10,也就是(V0->V1)。


2. 将这个边纳入最小生成树,现在手里有V0和V1两个顶点,再看跟V0和V1连接的线,权值都多少,再选个最少的。这里注意,V0有两个分支,刚才选中了一个权值小的分支

(V0->V1,而剩下的那个分支则参与第二轮选路径,即第二轮选路径的备选边有:(V1->V2)、(V1->V8)、(V1->V6)、(V0->V5)。选个最少的,没错,是11,也就是(V0->V5)。

对最小生成树算法的理解_第2张图片

3. 现在我们有V0、V1、V5三个顶点了。开始第三轮选路径,这轮备选边有:(V1->V2)、(V1->V8)、(V1->V6)、(V5->V6)、(V5->V4)。选个最少的,没错,是12,也就是(V1->V8)。

4. 后面就是按这样,一轮一轮的找路就妥了。


算法思路就是每轮选路径的备选边,都是由连接已遍历过的顶点的边中,未被选到最小生成树中的其它边组成的。也就是一个顶点即使被遍历过,他的未被选进最小生成树中的其它边也继续参与每轮最小权值路径的选择。


下面是Prim算法的实现定义:

对最小生成树算法的理解_第3张图片





你可能感兴趣的:(数据结构)