龙空技术网

C语言 最小生成树(Prim & Kruskal算法)

快乐的时光czs 74

前言:

此刻咱们对“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、输出最小生成树的边和权重。

Kruskal算法

prim算法

标签: #krustra算法 #c语言中设两 #c语言只能实现一种算法嘛 #算法的乐趣源码 #kruskal算法求最小生成树实验报告