设计一个基于图的邻接矩阵的图的基本操作的演示程序C语言代码
时间: 2024-02-25 07:52:37 浏览: 58
C语言实现图的邻接矩阵存储操作
好的,以下是一个基于图的邻接矩阵实现的图的基本操作的演示程序C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20
typedef struct {
int vertex[MAX_VERTEX_NUM]; // 存储顶点信息
int edge[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存储边信息
int vertex_num; // 顶点数
int edge_num; // 边数
} Graph;
void init_graph(Graph* g) {
int i, j;
for (i = 0; i < MAX_VERTEX_NUM; i++) {
g->vertex[i] = 0;
for (j = 0; j < MAX_VERTEX_NUM; j++) {
g->edge[i][j] = 0;
}
}
g->vertex_num = 0;
g->edge_num = 0;
}
int get_vertex_index(Graph* g, int v) {
int i;
for (i = 0; i < g->vertex_num; i++) {
if (g->vertex[i] == v) {
return i;
}
}
return -1;
}
void add_vertex(Graph* g, int v) {
g->vertex[g->vertex_num++] = v;
}
void add_edge(Graph* g, int v1, int v2) {
int i = get_vertex_index(g, v1);
int j = get_vertex_index(g, v2);
if (i == -1 || j == -1) {
printf("Vertex not found!\n");
return;
}
g->edge[i][j] = 1;
g->edge_num++;
}
void remove_edge(Graph* g, int v1, int v2) {
int i = get_vertex_index(g, v1);
int j = get_vertex_index(g, v2);
if (i == -1 || j == -1) {
printf("Vertex not found!\n");
return;
}
g->edge[i][j] = 0;
g->edge_num--;
}
void print_graph(Graph* g) {
int i, j;
printf("Vertex Num: %d\n", g->vertex_num);
printf("Edge Num: %d\n", g->edge_num);
printf("Vertex List: ");
for (i = 0; i < g->vertex_num; i++) {
printf("%d ", g->vertex[i]);
}
printf("\n");
printf("Edge List:\n");
for (i = 0; i < g->vertex_num; i++) {
for (j = 0; j < g->vertex_num; j++) {
if (g->edge[i][j]) {
printf("(%d, %d)\n", g->vertex[i], g->vertex[j]);
}
}
}
}
int main() {
Graph g;
init_graph(&g);
add_vertex(&g, 1);
add_vertex(&g, 2);
add_vertex(&g, 3);
add_vertex(&g, 4);
add_edge(&g, 1, 2);
add_edge(&g, 1, 3);
add_edge(&g, 2, 4);
add_edge(&g, 3, 4);
remove_edge(&g, 1, 2);
print_graph(&g);
return 0;
}
```
该程序定义了一个Graph结构体,其中包含了存储顶点信息和边信息的数组,以及顶点数和边数两个变量。程序实现了以下几个基本操作:
- init_graph():初始化图结构体,将所有元素赋值为0;
- get_vertex_index():查找某个顶点在数组中的下标;
- add_vertex():添加一个顶点到数组中;
- add_edge():添加一条边到数组中;
- remove_edge():删除一条边;
- print_graph():打印图信息。
程序在main函数中演示了如何使用这些函数来创建一个图、添加顶点和边、删除边、打印图信息。
阅读全文