用c语言写一个求有向图中每个顶点的入度和出度的程序
时间: 2024-03-14 14:43:04 浏览: 85
基于c语言的有向图的应用程序
4星 · 用户满意度95%
好的,以下是一个求有向图中每个顶点入度和出度的 C 语言程序:
```c
#include <stdio.h>
#define MAX_VERTEX_NUM 100
// 有向图的邻接矩阵表示法结构体
typedef struct {
int vertex[MAX_VERTEX_NUM]; // 存储顶点的数组
int arc[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存储边的邻接矩阵
int vertex_num; // 顶点数
int arc_num; // 边数
} Graph;
// 初始化有向图
void init_graph(Graph *G) {
int i, j;
printf("请输入顶点数和边数:");
scanf("%d %d", &G->vertex_num, &G->arc_num);
printf("请输入顶点信息:");
for (i = 0; i < G->vertex_num; i++) {
scanf("%d", &G->vertex[i]);
}
for (i = 0; i < G->vertex_num; i++) {
for (j = 0; j < G->vertex_num; j++) {
G->arc[i][j] = 0; // 初始化邻接矩阵
}
}
printf("请输入每条边的起点和终点:\n");
for (i = 0; i < G->arc_num; i++) {
int start, end;
scanf("%d %d", &start, &end);
G->arc[start][end] = 1; // 构建邻接矩阵
}
}
// 计算有向图每个顶点的入度和出度
void calc_degree(Graph *G, int indegree[], int outdegree[]) {
int i, j;
for (i = 0; i < G->vertex_num; i++) {
indegree[i] = 0;
outdegree[i] = 0;
for (j = 0; j < G->vertex_num; j++) {
if (G->arc[i][j] == 1) {
outdegree[i]++;
indegree[j]++;
}
}
}
}
// 输出有向图每个顶点的入度和出度
void print_degree(Graph *G, int indegree[], int outdegree[]) {
int i;
printf("顶点\t入度\t出度\n");
for (i = 0; i < G->vertex_num; i++) {
printf("%d\t%d\t%d\n", G->vertex[i], indegree[i], outdegree[i]);
}
}
int main() {
Graph G;
int indegree[MAX_VERTEX_NUM], outdegree[MAX_VERTEX_NUM]; // 存储每个顶点的入度和出度
init_graph(&G); // 初始化有向图
calc_degree(&G, indegree, outdegree); // 计算每个顶点的入度和出度
print_degree(&G, indegree, outdegree); // 输出每个顶点的入度和出度
return 0;
}
```
程序的主要思路是:
1. 定义一个结构体 `Graph`,用邻接矩阵的方式表示有向图;
2. 初始化有向图,包括输入顶点数、边数、顶点信息和每条边的起点和终点,构建邻接矩阵;
3. 计算每个顶点的入度和出度,遍历邻接矩阵,统计每个顶点的入度和出度;
4. 输出每个顶点的入度和出度,按照格式输出即可。
以上程序可以计算有向图中每个顶点的入度和出度,可以根据实际需求进行修改。
阅读全文