普利姆算法寻找最小生成树
普利姆算法
原理:将顶点分为两个类,其中一类为没有选中类,另一类为选中类。每次迭代中将权值小的路径添加到选中类找到最小生成树。
图形理解:![](https://i-blog.csdnimg.cn/blog_migrate/1392d5bbaa9390e522eb2700bfd6778e.png)
我们从A点开始,首先将A点纳入选中类,在从A点向非选中类找最小路径得到A——>B这条,此时再将A和B看为一个整体,向非选中类找最小路径得到A——>B——>C,按照这种流程最终可以得到最后一幅图,去掉不必要的边后,就为最小生成树。值为39。
JAVA代码实现:
运行结果:
代码运行过程:
第一次遍历从A到其他点,代表A的是第一行,而A只能到B-K的点,第一列是A,所以只能遍历下标1到10的数据。得到B点。
第二次遍历从A和B到其他点,代表AB的是第一二行,而AB只能到C-K的点,第一列和第二列是A和B,所以只能遍历下标2到10的数据。得到C点。
第三次遍历从AB和C到其他点,代表ABC的是第一二三行,而ABC只能到D-K的点,第一列第二列和第三列分别是AB和C,所以只能遍历下标3到10的数据。得到E点。
第四次遍历从ABC和E到其他点,代表ABCE的是第一二三五行,而ABCD只能到D和F-K的点,第一列第二列第三列和第五列分别是ABC和E,所以只能遍历下标3和5到10的数据。以此类推,后面的大家自己体会。
第一次写,经验不足,后会有期。