晚上时候复习了一下大学学习的最小生成树,结合一些视频和文章复习和重新认识了一下啊最小生成树。
它可以解决一些实际生活上的问题,如何铺设下水道或者电缆成本最小并且可以保证每个城市都有电缆一些列问题等。
大概思路有俩种 :
第一种很好理解把所有的边的权值进行排序,然后进行取舍,假设点数为n
,那么只需要取n-1个边就可以把这n个点连接起来。所有我们结束的标致是(点数-1)个边时完成了最小生成树。 那么取舍的条件是什么 ,取线时候判断我们的图是不是有环存在如果取了这个边 纯在环 那么就舍弃掉
如何判断 是不是成环 我们需要知道这边上的俩个顶点是不是都有使用过。如果不成环就取这个边 把这个边的俩个顶点加入到一个集合 ,使用的变数加一 成环就丢弃找下一个权值最小的边。直到 n-1 个边即可。
根据以上就可以知道我们要设计的数据结果需要什么,图 , 边 和一个表
还有一个记录使用了多少个边的变量
第二种方法 就是选取一个点 把该店放入一个选取过的点的集合 其他未被选取的点作为一个集合 然后在选取过的点集合取连接未选取点的集合的线路中选择一个最短的边 然后把该边对应的俩加入到选取过的集合 一次循环知道都被选取进入选入过的点
最小生成树的结果并不唯一。所有无论那种方式都需要对相同值进行处理 ,不一样的方式生产的树未必相同,