1.问题
生活中最小生成树的应用十分广泛,比如:要连通n个城市需要n-1条边线路,那么怎么样建设才能使工程造价最小呢?
可以把线路的造价看成权值求这几个城市的连通图的最小生成树。求最小造价的过程也就转化成求最小生成树的过程,则最小生成树表示使其造价最小的生成树。
最小生成树:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。
分别用 kruskal(克鲁斯卡尔)算法和prim(普里姆)算法求出。
2.解析
Prim算法------“贪心算法”
“贪”:每一步都要最好的。
“好”:权重最小的边
约束条件:
1.只能使用图里面的边
2.只能正好使用V-1条边
3.不能有回路l
Prim算法
- 任选一个节点,假设从A开始
- 选中图中距离树最近但是还没被选中的顶点,保证不构成回路:如下图依次选中(A,F)(F,B)(B,D)(D,E)(B,C)
3.最终,构成最小生成树
Kruskal算法
将所有边按照权值的大小进行升序排序,然后从小到大一一判断,条件为:如果这个边不会与之前选择的所有边组成回路,就可以作为最小生成树的一部分;反之,舍去。直到具有 n 个顶点的连通网筛选出来 n-1 条边为止。筛选出来的边和所有的顶点构成此连通网的最小生成树。