不带输入的prim算法求最小生成树,结点为字母c语言完整代码
时间: 2024-02-29 11:51:40 浏览: 52
以下是不带输入的 Prim 算法求最小生成树的 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define MAX_VERTICES 26 // 假设最多有 26 个节点
int graph[MAX_VERTICES][MAX_VERTICES]; // 图的邻接矩阵
int parent[MAX_VERTICES]; // 记录最小生成树中每个节点的父节点
int key[MAX_VERTICES]; // 记录每个节点的 key 值
int visited[MAX_VERTICES]; // 记录每个节点是否已访问
int min_key(int key[], int visited[], int n) {
int min = INT_MAX, min_index;
for (int i = 0; i < n; i++) {
if (!visited[i] && key[i] < min) {
min = key[i];
min_index = i;
}
}
return min_index;
}
void prim(int n) {
for (int i = 0; i < n; i++) {
key[i] = INT_MAX;
visited[i] = 0;
}
key[0] = 0;
parent[0] = -1;
for (int i = 0; i < n - 1; i++) {
int u = min_key(key, visited, n);
visited[u] = 1;
for (int v = 0; v < n; v++) {
if (graph[u][v] && !visited[v] && graph[u][v] < key[v]) {
parent[v] = u;
key[v] = graph[u][v];
}
}
}
}
int main() {
int n;
printf("Enter the number of vertices: ");
scanf("%d", &n);
printf("Enter the adjacency matrix:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &graph[i][j]);
}
}
prim(n);
printf("Minimum Spanning Tree:\n");
for (int i = 1; i < n; i++) {
printf("%c - %c\n", 'A' + parent[i], 'A' + i);
}
return 0;
}
```
这段代码使用了邻接矩阵来表示图,每个节点用一个字母来表示。`prim` 函数实现了 Prim 算法,`min_key` 函数用于找到当前 key 值最小的节点。最后输出得到的最小生成树。
阅读全文