用C语言编写代码实现运行离散数学中生成树的程序
时间: 2024-02-20 09:59:59 浏览: 61
C语言树的实现
以下是用C语言实现生成树的程序:
```c
#include <stdio.h>
#define MAX 100
int n, m; //n表示点的个数,m表示边的个数
int graph[MAX][MAX]; //邻接矩阵存储图
int visited[MAX]; //标记数组,标记节点是否已经被访问
int min_distance[MAX]; //最小距离数组,存储每个节点到生成树的最小距离
int parent[MAX]; //父节点数组,存储每个节点在生成树中的父节点
void prim(int start) //Prim算法生成最小生成树
{
//初始化
int i, j, u;
for(i=0; i<n; i++)
{
visited[i] = 0;
min_distance[i] = graph[start][i];
parent[i] = start;
}
visited[start] = 1;
min_distance[start] = 0;
//生成n-1条边
for(i=0; i<n-1; i++)
{
int min = MAX;
//在未访问节点中找到距离生成树最近的节点
for(j=0; j<n; j++)
{
if(!visited[j] && min_distance[j] < min)
{
min = min_distance[j];
u = j;
}
}
visited[u] = 1;
//更新最小距离和父节点
for(j=0; j<n; j++)
{
if(!visited[j] && graph[u][j] < min_distance[j])
{
min_distance[j] = graph[u][j];
parent[j] = u;
}
}
}
}
void print_tree() //输出生成树
{
int i;
printf("生成树的边为:\n");
for(i=1; i<n; i++)
{
printf("%d-%d\n", parent[i], i);
}
}
int main()
{
int i, j, u, v, w;
printf("请输入点的个数和边的个数:");
scanf("%d%d", &n, &m);
//初始化邻接矩阵
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
graph[i][j] = MAX;
}
}
//读入边的信息
for(i=0; i<m; i++)
{
printf("请输入第%d条边的起点、终点和权值:", i+1);
scanf("%d%d%d", &u, &v, &w);
graph[u][v] = w;
graph[v][u] = w;
}
//生成最小生成树
prim(0);
//输出生成树
print_tree();
return 0;
}
```
运行程序后,按照提示输入点的个数和边的个数,以及每条边的起点、终点和权值,即可得到生成树的边。
阅读全文