用c语言编写邻接矩阵的初始化、撤销、边的搜索、插入、删除等操作
时间: 2023-10-07 18:14:30 浏览: 144
邻接矩阵是一种用于表示图的数据结构,其中矩阵的行和列分别对应于图中的顶点,矩阵中的元素表示两个顶点之间是否存在边。以下是用 C 语言实现邻接矩阵的初始化、撤销、边的搜索、插入、删除等操作的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTICES 100
#define TRUE 1
#define FALSE 0
int adj_matrix[MAX_VERTICES][MAX_VERTICES];
int visited[MAX_VERTICES];
int vertex_count = 0;
// 初始化邻接矩阵
void init_matrix()
{
int i, j;
for (i = 0; i < MAX_VERTICES; i++) {
for (j = 0; j < MAX_VERTICES; j++) {
adj_matrix[i][j] = 0;
}
}
}
// 撤销邻接矩阵
void destroy_matrix()
{
int i, j;
for (i = 0; i < MAX_VERTICES; i++) {
for (j = 0; j < MAX_VERTICES; j++) {
adj_matrix[i][j] = 0;
}
}
vertex_count = 0;
}
// 添加边
void add_edge(int i, int j)
{
if (i >= 0 && i < vertex_count && j >= 0 && j < vertex_count) {
adj_matrix[i][j] = 1;
adj_matrix[j][i] = 1;
}
}
// 删除边
void remove_edge(int i, int j)
{
if (i >= 0 && i < vertex_count && j >= 0 && j < vertex_count) {
adj_matrix[i][j] = 0;
adj_matrix[j][i] = 0;
}
}
// 搜索边
int has_edge(int i, int j)
{
if (i >= 0 && i < vertex_count && j >= 0 && j < vertex_count) {
return adj_matrix[i][j];
}
return FALSE;
}
// 深度优先搜索
void depth_first_search(int i)
{
int j;
visited[i] = TRUE;
printf("%d ", i);
for (j = 0; j < vertex_count; j++) {
if (has_edge(i, j) && !visited[j]) {
depth_first_search(j);
}
}
}
int main()
{
int i, j;
// 初始化邻接矩阵
init_matrix();
// 添加顶点
vertex_count = 5;
// 添加边
add_edge(0, 1);
add_edge(0, 2);
add_edge(1, 2);
add_edge(2, 3);
add_edge(3, 4);
// 深度优先搜索
printf("Depth First Search: ");
for (i = 0; i < vertex_count; i++) {
visited[i] = FALSE;
}
depth_first_search(0);
printf("\n");
// 删除边
remove_edge(2, 3);
// 深度优先搜索
printf("Depth First Search: ");
for (i = 0; i < vertex_count; i++) {
visited[i] = FALSE;
}
depth_first_search(0);
printf("\n");
// 撤销邻接矩阵
destroy_matrix();
return 0;
}
```
以上代码实现了邻接矩阵的初始化、撤销、边的搜索、插入、删除等操作。其中,init_matrix() 函数用于初始化邻接矩阵,destroy_matrix() 函数用于撤销邻接矩阵,add_edge() 函数用于添加边,remove_edge() 函数用于删除边,has_edge() 函数用于搜索边,depth_first_search() 函数用于深度优先搜索。
阅读全文