假设不带权有向图采用邻接矩阵g存储,设计实现以下功能的算法:- (1) 求出图中每个顶点的入度。- (2) 求出图中每个顶点的出度。- (3) 求出图中出度为0的顶点数。 用c语言
时间: 2025-01-24 13:11:30 浏览: 41
好的,我来为您设计一个C语言程序,实现您所描述的功能。以下是完整的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100
// 函数声明
void initGraph(int g[][MAX_VERTEX_NUM], int n);
void printGraph(int g[][MAX_VERTEX_NUM], int n);
void calculateIndegrees(int g[][MAX_VERTEX_NUM], int n, int indegrees[]);
void calculateOutdegrees(int g[][MAX_VERTEX_NUM], int n, int outdegrees[]);
int countZeroOutdegree(int outdegrees[], int n);
int main() {
int n, g[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
int indegrees[MAX_VERTEX_NUM] = {0};
int outdegrees[MAX_VERTEX_NUM] = {0};
int zeroOutdegreeCount;
printf("请输入顶点数量: ");
scanf("%d", &n);
initGraph(g, n);
printf("图的邻接矩阵表示为:\n");
printGraph(g, n);
calculateIndegrees(g, n, indegrees);
printf("各顶点的入度为:\n");
for (int i = 0; i < n; i++) {
printf("顶点 %d: %d\n", i, indegrees[i]);
}
calculateOutdegrees(g, n, outdegrees);
printf("各顶点的出度为:\n");
for (int i = 0; i < n; i++) {
printf("顶点 %d: %d\n", i, outdegrees[i]);
}
zeroOutdegreeCount = countZeroOutdegree(outdegrees, n);
printf("出度为0的顶点数: %d\n", zeroOutdegreeCount);
return 0;
}
void initGraph(int g[][MAX_VERTEX_NUM], int n) {
printf("请输入邻接矩阵(0表示无边,1表示有边):\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &g[i][j]);
}
}
}
void printGraph(int g[][MAX_VERTEX_NUM], int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", g[i][j]);
}
printf("\n");
}
}
void calculateIndegrees(int g[][MAX_VERTEX_NUM], int n, int indegrees[]) {
for (int j = 0; j < n; j++) {
for (int i = 0; i < n; i++) {
if (g[i][j] != 0) {
indegrees[j]++;
}
}
}
}
void calculateOutdegrees(int g[][MAX_VERTEX_NUM], int n, int outdegrees[]) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (g[i][j] != 0) {
outdegrees[i]++;
}
}
}
}
int countZeroOutdegree(int outdegrees[], int n) {
int count = 0;
for (int i = 0; i < n; i++) {
if (outdegrees[i] == 0) {
count++;
}
}
return count;
}
```
这个程序实现了以下功能:
1. 初始化图: 使用邻接矩阵表示图,并从用户输入获取图的信息。
2. 打印图: 以邻接矩阵的形式打印图。
3. 计算入度: 计算每个顶点的入度。
4. 计算出度: 计算每个顶点的出度。
5. 统计出度为0的顶点数: 统计图中出度为0的顶点数量。
程序的主要算法思路如下:
1. 入度计算: 对于每个顶点j,遍历第j列,如果g[i][j]不为0,则顶点j的入度加1。
2. 出度计算: 对于每个顶点i,遍历第i行,如果g[i][j]不为0,则顶点i的出度加1。
3. 统计出度为0的顶点数: 遍历出度数组,统计值为0的个数。
这个程序可以处理最大100个顶点的图。您可以根据需要调整MAX_VERTEX_NUM的值来改变最大顶点数。
阅读全文