创建无向图的邻接表表示,并求无向图(邻接表表示)中某个顶点的度,并使用C语言
时间: 2024-10-24 11:01:51 浏览: 17
在C语言中,我们可以使用数组或链表来创建无向图的邻接表表示。邻接表是一种存储图的常见数据结构,每个节点代表一个顶点,其对应的边通过链表连接到相应的相邻顶点。
假设我们使用动态数组(链接列表)来表示邻接表,首先我们需要定义两个结构体:`Vertex` 表示顶点,包含顶点编号和连接它的边的链表;`Edge` 表示边,包含起始顶点和目标顶点的引用。
以下是创建邻接表并计算某顶点度数的基本步骤:
```c
#include <stdlib.h>
#include <stdbool.h>
typedef struct Vertex {
int vertex_id;
Edge* edges;
size_t degree; // 记录该顶点的度,初始化为0
} Vertex;
typedef struct Edge {
Vertex* target;
bool visited; // 标记是否已遍历过
} Edge;
// 初始化一个顶点
Vertex* init_vertex(int id) {
Vertex* vertex = (Vertex*)malloc(sizeof(Vertex));
vertex->vertex_id = id;
vertex->edges = NULL;
vertex->degree = 0;
return vertex;
}
// 添加一条从起点到终点的边
void add_edge(Vertex* src, Vertex* dest) {
Edge* edge = (Edge*)malloc(sizeof(Edge));
edge->target = dest;
edge->visited = false;
if (!src->edges) {
src->edges = edge;
} else {
Edge* current = src->edges;
while (current->next) {
current = current->next;
}
current->next = edge;
}
src->degree++; // 更新源顶点度数
}
// 求给定顶点的度
size_t get_degree(Vertex* vertex) {
return vertex->degree;
}
// 示例:创建顶点和添加边
int main() {
Vertex* v1 = init_vertex(1);
Vertex* v2 = init_vertex(2);
Vertex* v3 = init_vertex(3);
add_edge(v1, v2); // 连接1和2
add_edge(v2, v1); // 图是无向的,所以也连v2到v1
add_edge(v2, v3); // 连接2和3
// 查看顶点v2的度
size_t degree_v2 = get_degree(v2);
printf("Degree of vertex 2: %zu\n", degree_v2);
free(v1);
free(v2);
free(v3);
return 0;
}
```
阅读全文