数据结构用c语言,用邻接矩阵实现图存储,并实现图的深度优先遍历。
时间: 2024-06-08 16:03:04 浏览: 160
邻接矩阵是一种表示图的数据结构,可以用C语言实现。在邻接矩阵中,每个顶点都对应矩阵中的一行和一列,矩阵中存储了边的信息,可以方便地进行图的遍历和其他操作。
具体实现步骤如下:
1. 定义邻接矩阵的数据结构:需要定义一个结构体来表示图,包含顶点数、边数和邻接矩阵等信息。
2. 创建邻接矩阵:使用二维数组来创建邻接矩阵,其中矩阵元素为0表示该顶点之间没有边,非0表示有边。
3. 实现深度优先遍历算法:深度优先遍历算法使用递归实现,首先访问起始顶点,然后依次访问与其相邻的未被访问过的顶点,直到所有可达顶点都被访问过。
以下是示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100
// 邻接矩阵结构体
typedef struct {
int vertex[MAX_VERTEX_NUM]; // 顶点数组
int edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vertex_num; // 顶点数
int edge_num; // 边数
} AdjacencyMatrix;
// 初始化邻接矩阵
void InitMatrix(AdjacencyMatrix* matrix) {
int i, j;
for (i = 0; i < MAX_VERTEX_NUM; i++) {
matrix->vertex[i] = i; // 初始化顶点数组
for (j = 0; j < MAX_VERTEX_NUM; j++) {
matrix->edges[i][j] = 0; // 初始化邻接矩阵
}
}
matrix->vertex_num = 0;
matrix->edge_num = 0;
}
// 添加边
void AddEdge(AdjacencyMatrix* matrix, int start, int end) {
matrix->edges[start][end] = 1;
matrix->edges[end][start] = 1; // 无向图需要将两个方向都标记上
matrix->edge_num++;
}
// 深度优先遍历
void DFS(AdjacencyMatrix* matrix, int visited[], int index) {
int i;
printf("%d ", matrix->vertex[index]); // 访问该顶点
visited[index] = 1; // 标记为已访问
for (i = 0; i < matrix->vertex_num; i++) {
if (matrix->edges[index][i] == 1 && visited[i] == 0) { // 与该顶点相邻且未被访问过
DFS(matrix, visited, i); // 递归访问该顶点
}
}
}
// 遍历图
void TraverseGraph(AdjacencyMatrix* matrix) {
int visited[MAX_VERTEX_NUM] = {0}; // 标记是否被访问过
int i;
for (i = 0; i < matrix->vertex_num; i++) {
if (visited[i] == 0) { // 如果该顶点未被访问过,则从该顶点开始深度优先遍历
DFS(matrix, visited, i);
}
}
}
int main() {
AdjacencyMatrix matrix;
int i;
// 初始化邻接矩阵
InitMatrix(&matrix);
// 添加边
AddEdge(&matrix, 0, 1);
AddEdge(&matrix, 0, 2);
AddEdge(&matrix, 1, 3);
AddEdge(&matrix, 1, 4);
AddEdge(&matrix, 2, 4);
AddEdge(&matrix, 3, 4);
// 遍历图
TraverseGraph(&matrix);
return 0;
}
```
阅读全文