用c语言实现:将字符串存储在无向图的各顶点中,并输出该图及各顶点数
时间: 2024-02-28 16:56:42 浏览: 31
以下是一个用 C 语言实现的示例代码,实现将字符串存储在无向图的各顶点中,并输出该图及各顶点数:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_VERTICES 50
// 无向图结构体
typedef struct graph {
char vertices[MAX_VERTICES][100]; // 顶点存储字符串
int edges[MAX_VERTICES][MAX_VERTICES]; // 边的邻接矩阵
int num_vertices; // 顶点数
} Graph;
// 初始化无向图
void initGraph(Graph* g) {
memset(g->vertices, 0, sizeof(g->vertices));
memset(g->edges, 0, sizeof(g->edges));
g->num_vertices = 0;
}
// 添加顶点
int addVertex(Graph* g, char* vertex) {
if (g->num_vertices >= MAX_VERTICES) {
return -1; // 顶点数达到上限
}
strcpy(g->vertices[g->num_vertices], vertex);
g->num_vertices++;
return 0;
}
// 添加边
void addEdge(Graph* g, int v1, int v2) {
g->edges[v1][v2] = 1;
g->edges[v2][v1] = 1;
}
// 输出无向图
void printGraph(Graph* g) {
printf("Graph:\n");
for (int i = 0; i < g->num_vertices; i++) {
printf("%d: %s\n", i, g->vertices[i]);
for (int j = 0; j < g->num_vertices; j++) {
if (g->edges[i][j] == 1) {
printf(" -> %s\n", g->vertices[j]);
}
}
}
printf("Number of vertices: %d\n", g->num_vertices);
}
int main() {
Graph g;
initGraph(&g);
// 添加顶点
addVertex(&g, "Alice");
addVertex(&g, "Bob");
addVertex(&g, "Charlie");
addVertex(&g, "David");
addVertex(&g, "Eve");
// 添加边
addEdge(&g, 0, 1);
addEdge(&g, 0, 2);
addEdge(&g, 1, 2);
addEdge(&g, 1, 3);
addEdge(&g, 2, 3);
addEdge(&g, 3, 4);
// 输出无向图
printGraph(&g);
return 0;
}
```
上述代码中,我们定义了一个 `Graph` 结构体,其中 `vertices` 数组存储顶点对应的字符串,`edges` 数组存储边的邻接矩阵。我们通过函数 `addVertex` 和 `addEdge` 分别添加顶点和边,通过 `printGraph` 函数输出无向图及顶点数。在 `main` 函数中,我们添加了一些顶点和边,以演示该代码的使用。