采用Prim算法构造最小生成树的过程和采用Kruskal算法构造最小生成树的过程

采用Prim算法构造最小生成树的过程

第一步:选取一个起点
如图,有6个顶点v1-v6,集合表示为:V={v1,…,V6},每条边的权值都在图上;在进行prim算法时,我们先随意选择一个顶点作为起始点(起始点的选取不会影响最小生成树结果),在此一般选择v1作为起始点,设U集合为当前所找到最小生成树里面的顶点,TE集合为所找到的边。
采用Prim算法构造最小生成树的过程和采用Kruskal算法构造最小生成树的过程_第1张图片
U={v1}; TE={}
第二步:寻找最小权值
查找一个顶点在U={v1}集合中,另一个顶点在V-U集合中的最小权值,通过图中我们可以看到边v1-v3的权值最小为1,那么将v3加入到U集合,(v1,v3)加入到TE。
采用Prim算法构造最小生成树的过程和采用Kruskal算法构造最小生成树的过程_第2张图片
第三步:继续寻找最小权值
在前一步的基础上,寻找最小权值,如此循环一下直到找到所有顶点为止。
采用Prim算法构造最小生成树的过程和采用Kruskal算法构造最小生成树的过程_第3张图片
采用Prim算法构造最小生成树的过程和采用Kruskal算法构造最小生成树的过程_第4张图片
采用Prim算法构造最小生成树的过程和采用Kruskal算法构造最小生成树的过程_第5张图片

U={v1,v3,v4,v2,v5,v6};
TE={(v1,v3),(v1,v4),(v1,v2),(v2,v5),(v5,v6)}
最小生成树为:
采用Prim算法构造最小生成树的过程和采用Kruskal算法构造最小生成树的过程_第6张图片

采用Kruskal算法构造最小生成树的过程

将所有边按照权值的大小进行升序排序,然后从小到大一一判断,条件为:如果这个边不会与之前选择的所有边组成回路,就可以作为最小生成树的一部分;反之,舍去。直到具有 n 个顶点的连通网筛选出来 n-1 条边为止。筛选出来的边和所有的顶点构成此连通网的最小生成树。
采用Prim算法构造最小生成树的过程和采用Kruskal算法构造最小生成树的过程_第7张图片
排序:1 2 3 4 5(v2,v3) 5(v2,v5) 6 7 8 9
选择:1
1 2
1 2 3
1 2 3 5(v2,v5) 选择4则形成回路,选择5(v2,v3)也形成回路
1 2 3 5(v2,v5) 6
最小生成树为:
采用Prim算法构造最小生成树的过程和采用Kruskal算法构造最小生成树的过程_第8张图片

你可能感兴趣的:(采用Prim算法构造最小生成树的过程和采用Kruskal算法构造最小生成树的过程)