最小生成树的实现(C语言)

您所在的位置:网站首页 kruskal算法求最小生成树c语言 最小生成树的实现(C语言)

最小生成树的实现(C语言)

2024-04-05 07:32| 来源: 网络整理| 查看: 265

今天做洛谷的时候刷到好多图论的题,发现自己在这一方面算法的掌握还是有待提高啊。在这就先介绍最小生成树的算法吧。

最小生成树

最小生成树(minimum spanning tree)是由n个顶点,n-1条边,将一个连通图连接起来,且使权值最小的结构。 最小生成树可以用Prim(普里姆)算法或kruskal(克鲁斯卡尔)算法求出。 此外还可以用bfs和dfs生成,分别叫bfs生成树和dfs生成树。 例: 在这里插入图片描述

Prim(普里姆)算法

这里就采用的是邻接矩阵存储的, 个人觉得Prim和最短路中的dijkstra很像,方法: ① 先建立一个只有一个结点的树,这个结点可以是原图中任 意的一个结点。

② 使用一条边扩展这个树,要求这条边一个顶点在树中另一 个顶点不在树中,并且这条边的权值要求最小。

③ 重复步骤②直到所有顶点都在树中。 如图: 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

#include #define MAX 100 #define MAXCOST 100000 int graph[MAX][MAX]; void prim(int graph[][MAX], int n) { int lowcost[MAX];//lowcost[i]:表示以i为终点的边的最小权值,当lowcost[i]=0表示i点加入了MST int mst[MAX];//表示对应lowcost[i]的起点,当mst[i]=0表示起点i加入MST int i, j, min, minid, sum = 0; for (i = 2; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3