欢迎光临散文网 会员登陆 & 注册

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

2023-08-16 22:33 作者:快乐的小log  | 我要投稿

        最小生成树是一个无向连通图的最小权重生成树。在C语言中,可以使用Prim算法或Kruskal算法来实现最小生成树。

Prim算法实现最小生成树的思路如下:

  1. 创建一个数组key[],用于存储顶点到最小生成树的最小权重。

  2. 创建一个数组parent[],用于存储最小生成树中每个顶点的父节点。

  3. 创建一个数组visited[],用于标记顶点是否已经加入最小生成树。

  4. 将key[]数组初始化为无穷大(INF),parent[]数组初始化为空(-1),visited[]数组初始化为false。

  5. 将第一个顶点作为起始顶点,将key[0]设置为0。

  6. 循环进行以下步骤,直到所有顶点都被加入最小生成树:

    1. 找到未加入最小生成树的顶点中key值最小的顶点。

    2. 将该顶点标记为visited[]数组中的true。

    3. 遍历该顶点的所有邻接顶点,如果邻接顶点未被访问且边的权重小于key值,则更新key值和parent值。

  7. 输出最小生成树的边和权重。

Kruskal算法实现最小生成树的思路如下:

  1. 创建一个数组parent[],用于存储每个顶点的父节点。

  2. 创建一个数组rank[],用于存储每个顶点的秩。

  3. 创建一个辅助数组edges[],用于存储图中的所有边。

  4. 将图中的所有边按照权重从小到大排序。

  5. 初始化parent[]数组和rank[]数组,将所有顶点的父节点设置为自身,秩设置为0。

  6. 循环遍历排序后的边,如果两个顶点不在同一个连通分量中(通过判断它们的最终父节点是否相同):

    1. 将边加入最小生成树中。

    2. 合并两个顶点所在的连通分量,即将其中一个顶点的父节点设置为另一个顶点。

  7. 输出最小生成树的边和权重。

prim算法运行结果
Kruskal算法运行结果


C语言解决最小生成树(Prim & Kruskal算法)的评论 (共 条)

分享到微博请遵守国家法律