前言:
此刻咱们对“krustra算法”大体比较着重,看官们都需要剖析一些“krustra算法”的相关知识。那么小编同时在网络上收集了一些有关“krustra算法””的相关资讯,希望我们能喜欢,各位老铁们一起来学习一下吧!最小生成树是一个无向连通图的最小权重生成树。在C语言中,可以使用Prim算法或Kruskal算法来实现最小生成树。
Prim算法实现最小生成树的思路如下:
1、创建一个数组key[],用于存储顶点到最小生成树的最小权重。
2、创建一个数组parent[],用于存储最小生成树中每个顶点的父节点。
3、创建一个数组visited[],用于标记顶点是否已经加入最小生成树。
4、将key[]数组初始化为无穷大(INF),parent[]数组初始化为空(-1),visited[]数组初始化为false。
5、将第一个顶点作为起始顶点,将key[0]设置为0。
6、循环进行以下步骤,直到所有顶点都被加入最小生成树:
* 找到未加入最小生成树的顶点中key值最小的顶点。
* 将该顶点标记为visited[]数组中的true。
* 遍历该顶点的所有邻接顶点,如果邻接顶点未被访问且边的权重小于key值,则更新key值和parent值。
7、输出最小生成树的边和权重。
Kruskal算法实现最小生成树的思路如下:
1、创建一个数组parent[],用于存储每个顶点的父节点。
2、创建一个数组rank[],用于存储每个顶点的秩。
3、创建一个辅助数组edges[],用于存储图中的所有边。
4、将图中的所有边按照权重从小到大排序。
5、初始化parent[]数组和rank[]数组,将所有顶点的父节点设置为自身,秩设置为0。
6、循环遍历排序后的边,如果两个顶点不在同一个连通分量中(通过判断它们的最终父节点是否相同):
* 将边加入最小生成树中。
* 合并两个顶点所在的连通分量,即将其中一个顶点的父节点设置为另一个顶点。
7、输出最小生成树的边和权重。
标签: #krustra算法 #c语言中设两 #c语言只能实现一种算法嘛 #算法的乐趣源码 #kruskal算法求最小生成树实验报告