用c语言完成邻接矩阵的初始化、撤销和边的搜索、插入、删除
时间: 2023-12-13 14:05:47 浏览: 211
邻接矩阵是一种图的表示方法,我们可以使用二维数组来表示。其中,数组的行和列分别表示图中的顶点,数组元素的值表示顶点之间的边的关系。如果两个顶点之间有边相连,则对应的数组元素的值为1,否则为0。
下面是使用C语言完成邻接矩阵的初始化、撤销和边的搜索、插入、删除的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100 // 最大顶点数
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;
}
// 撤销邻接矩阵
void destroy_graph(Graph* g) {
g->vertex_num = 0;
g->edge_num = 0;
}
// 搜索边
int search_edge(Graph* g, int v1, int v2) {
if (v1 < 0 || v1 >= g->vertex_num || v2 < 0 || v2 >= g->vertex_num) {
return 0;
}
return g->edge[v1][v2];
}
// 插入边
void insert_edge(Graph* g, int v1, int v2) {
if (v1 < 0 || v1 >= g->vertex_num || v2 < 0 || v2 >= g->vertex_num) {
return;
}
if (g->edge[v1][v2] == 0) {
g->edge[v1][v2] = 1;
g->edge_num++;
}
}
// 删除边
void delete_edge(Graph* g, int v1, int v2) {
if (v1 < 0 || v1 >= g->vertex_num || v2 < 0 || v2 >= g->vertex_num) {
return;
}
if (g->edge[v1][v2] == 1) {
g->edge[v1][v2] = 0;
g->edge_num--;
}
}
int main() {
Graph g;
init_graph(&g);
g.vertex_num = 5;
// 添加顶点
int i;
for (i = 0; i < g.vertex_num; i++) {
g.vertex[i] = i;
}
// 添加边
insert_edge(&g, 0, 1);
insert_edge(&g, 0, 3);
insert_edge(&g, 1, 2);
insert_edge(&g, 1, 4);
insert_edge(&g, 2, 3);
// 删除边
delete_edge(&g, 1, 2);
// 搜索边
printf("%d\n", search_edge(&g, 0, 1));
printf("%d\n", search_edge(&g, 1, 2));
destroy_graph(&g);
return 0;
}
```
在这个示例代码中,我们使用了一个 `Graph` 结构体来表示邻接矩阵,其中包括了顶点数组、邻接矩阵、顶点数和边数等信息。通过调用不同的函数来实现邻接矩阵的初始化、撤销和边的搜索、插入、删除等操作。
阅读全文