使用c语言代码利用prim算法求解最小生成树
时间: 2023-07-22 11:38:15 浏览: 112
好的,以下是使用C语言代码实现Prim算法求解最小生成树的示例:
```c
#include <stdio.h>
#define INF 0x3f3f3f3f // 无穷大值
int main()
{
int n, m; // n为节点数,m为边数
int u, v, w; // u、v为边的两个端点,w为边的权值
int Map[1010][1010]; // 邻接矩阵存储图
int vis[1010]; // 标记节点是否被访问过
int dis[1010]; // 存储节点到生成树的距离
int ans = 0; // 最小生成树的权值
int i, j, k;
scanf("%d %d", &n, &m);
// 初始化邻接矩阵和dis数组
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
{
Map[i][j] = INF;
}
dis[i] = INF;
vis[i] = 0;
}
// 读入边的信息
for(i = 1; i <= m; i++)
{
scanf("%d %d %d", &u, &v, &w);
Map[u][v] = Map[v][u] = w;
}
// 从节点1开始构造最小生成树
dis[1] = 0;
for(i = 1; i <= n; i++)
{
int min = INF;
int pos = 0;
for(j = 1; j <= n; j++)
{
if(!vis[j] && dis[j] < min)
{
min = dis[j];
pos = j;
}
}
vis[pos] = 1;
ans += dis[pos];
for(k = 1; k <= n; k++)
{
if(!vis[k] && Map[pos][k] < dis[k])
{
dis[k] = Map[pos][k];
}
}
}
printf("%d\n", ans);
return 0;
}
```
以上代码使用了邻接矩阵存储图,时间复杂度为O(n^2)。在实际使用中,如果图比较稠密,可以使用邻接表来存储图,时间复杂度为O(mlogn)。
阅读全文