使用c,编程计算图中结点的度数,并设计相应的图作为测试用例,进行功能测试题
时间: 2024-09-13 22:09:58 浏览: 42
在C语言中,计算图中结点的度数通常涉及到图的表示和遍历。图可以用邻接矩阵或邻接表来表示,这里我将提供一个使用邻接矩阵的示例代码,以及一个简单的测试用例。
首先,我们定义图的结构和计算结点度数的函数。图的每个结点的度数是与该结点相连的边的数量,对于无向图来说,度数就是邻接矩阵中对应行或列中值为1的个数。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTICES 10
// 图的结构体定义
typedef struct {
int numVertices; // 顶点的数量
int adjMatrix[MAX_VERTICES][MAX_VERTICES]; // 邻接矩阵表示图
} Graph;
// 创建图的函数
Graph* createGraph(int numVertices) {
Graph* graph = (Graph*)malloc(sizeof(Graph));
graph->numVertices = numVertices;
for (int i = 0; i < numVertices; i++) {
for (int j = 0; j < numVertices; j++) {
graph->adjMatrix[i][j] = 0; // 初始化邻接矩阵为0
}
}
return graph;
}
// 计算结点的度数
int degree(Graph* graph, int vertex) {
int degree = 0;
for (int i = 0; i < graph->numVertices; i++) {
if (graph->adjMatrix[vertex][i] == 1) {
degree++;
}
}
return degree;
}
// 测试用例
int main() {
// 创建一个测试图,有4个结点,如图所示:
// 0 -- 1
// | \ /
// | 2
// | / \
// 3 -- 4
Graph* graph = createGraph(5);
graph->adjMatrix[0][1] = 1;
graph->adjMatrix[0][2] = 1;
graph->adjMatrix[0][3] = 1;
graph->adjMatrix[1][2] = 1;
graph->adjMatrix[1][4] = 1;
graph->adjMatrix[2][3] = 1;
graph->adjMatrix[2][4] = 1;
graph->adjMatrix[3][4] = 1;
// 计算并打印每个结点的度数
for (int i = 0; i < graph->numVertices; i++) {
printf("Vertex %d has degree: %d\n", i, degree(graph, i));
}
// 释放图的内存
free(graph);
return 0;
}
```
在上述代码中,我们首先定义了一个图的结构体,包含顶点数量和邻接矩阵。然后创建了图,并初始化邻接矩阵。接着实现了一个计算结点度数的函数`degree`。最后在`main`函数中创建了一个简单的测试用例,计算并打印每个结点的度数,并在最后释放了图所占用的内存。
阅读全文