用c语言实现prim算法
时间: 2023-08-14 11:33:13 浏览: 96
Prim 算法是一种解决最小生成树问题的贪心算法。下面是使用 C 语言实现 Prim 算法的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_VERTICES 1000
#define INFINITY 1000000
int n; // 图中节点数
int graph[MAX_VERTICES][MAX_VERTICES]; // 图的邻接矩阵
int parent[MAX_VERTICES]; // 最小生成树的父节点数组
int distance[MAX_VERTICES]; // 用于记录节点到最小生成树的距离
bool visited[MAX_VERTICES]; // 记录节点是否已加入最小生成树
int get_min_distance_node() {
int min_distance = INFINITY;
int min_node = -1;
for (int i = 0; i < n; i++) {
if (!visited[i] && distance[i] < min_distance) {
min_distance = distance[i];
min_node = i;
}
}
return min_node;
}
void prim(int start) {
for (int i = 0; i < n; i++) {
parent[i] = -1;
distance[i] = INFINITY;
visited[i] = false;
}
distance[start] = 0;
for (int i = 0; i < n - 1; i++) {
int u = get_min_distance_node();
visited[u] = true;
for (int v = 0; v < n; v++) {
if (!visited[v] && graph[u][v] != 0 && graph[u][v] < distance[v]) {
parent[v] = u;
distance[v] = graph[u][v];
}
}
}
}
int main() {
// 初始化图的邻接矩阵
// ...
prim(0);
// 输出最小生成树的父节点数组
for (int i = 0; i < n; i++) {
printf("%d ", parent[i]);
}
return 0;
}
```
在上面的代码中,我们先定义了一些常量和变量,然后实现了两个辅助函数 `get_min_distance_node` 和 `prim`。其中,`get_min_distance_node` 函数用于获取当前节点到最小生成树的距离最小的节点,`prim` 函数实现了 Prim 算法的核心逻辑。
在 `main` 函数中,我们先初始化图的邻接矩阵,然后调用 `prim` 函数,最后输出最小生成树的父节点数组。
注意:上面的代码只是一个示例,实际上,Prim 算法的实现可以有很多种。
阅读全文