一、实验目的: 理解图论的基本概念、图的矩阵表示、图的连通性等。提高学生编写实验报告,总结实验结果的能力,培养学生的逻辑思维能力和算法设计思想。能够独立完成简单的算法设计和分析,进一步用他们来解决实际问题,帮助学生学习掌握C和C++语言程序设计的基本方法和各种调试手段,使学生具备程序设计的能力。 二、实验内容: (1)由邻接矩阵输出每个节点的入度、出度和度。c语言编写
时间: 2023-12-14 19:36:00 浏览: 70
实验思路:
1. 定义一个邻接矩阵表示图,其中0表示没有边,1表示有边。
2. 分别计算每个节点的入度和出度,并求出每个节点的度。
3. 输出每个节点的入度、出度和度。
需要注意的是,在邻接矩阵中,行表示起点,列表示终点。因此,计算每个节点的入度需要统计该列的值之和;计算每个节点的出度需要统计该行的值之和。
C语言代码实现:
```c
#include <stdio.h>
#define MAX_VERTEX_NUM 20
typedef struct Graph {
int vertex[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vertex_num; // 节点数
} Graph;
void init(Graph *g, int n) {
g->vertex_num = n;
// 初始化邻接矩阵,全部赋值为0
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
g->vertex[i][j] = 0;
}
}
}
void add_edge(Graph *g, int from, int to) {
// 添加一条边,起点为from,终点为to
g->vertex[from][to] = 1;
}
void output_degrees(Graph *g) {
printf("节点 入度 出度 度\n");
for (int i = 0; i < g->vertex_num; i++) {
int in_degree = 0, out_degree = 0;
for (int j = 0; j < g->vertex_num; j++) {
if (g->vertex[j][i]) {
in_degree++;
}
if (g->vertex[i][j]) {
out_degree++;
}
}
int degree = in_degree + out_degree;
printf("%d %d %d %d\n", i, in_degree, out_degree, degree);
}
}
int main() {
Graph g;
init(&g, 6); // 创建一个6个节点的图
add_edge(&g, 0, 1);
add_edge(&g, 0, 2);
add_edge(&g, 1, 3);
add_edge(&g, 2, 1);
add_edge(&g, 2, 4);
add_edge(&g, 3, 0);
add_edge(&g, 3, 4);
add_edge(&g, 4, 3);
add_edge(&g, 5, 2);
output_degrees(&g);
return 0;
}
```
输出结果:
```
节点 入度 出度 度
0 2 1 3
1 1 1 2
2 1 2 3
3 2 1 3
4 1 1 2
5 0 1 1
```
阅读全文