用C语言编写代码实现图的深度优先,广度优先遍历完
时间: 2023-07-24 20:18:31 浏览: 21
好的,以下是使用C语言编写的图的深度优先和广度优先遍历的完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 10
// 定义邻接矩阵结构体
typedef struct {
int vertex[MAX_VERTEX_NUM]; // 存放顶点信息
int edge[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存放边的信息
int vertex_num, edge_num; // 存放顶点数和边数
} GraphMatrix;
// 初始化邻接矩阵
void initGraph(GraphMatrix *graph) {
int i, j;
graph->vertex_num = 0;
graph->edge_num = 0;
for (i = 0; i < MAX_VERTEX_NUM; i++) {
graph->vertex[i] = 0;
for (j = 0; j < MAX_VERTEX_NUM; j++) {
graph->edge[i][j] = 0;
}
}
}
// 添加顶点
void addVertex(GraphMatrix *graph, int vertex) {
graph->vertex[graph->vertex_num++] = vertex;
}
// 添加边
void addEdge(GraphMatrix *graph, int start, int end) {
graph->edge[start][end] = 1;
graph->edge[end][start] = 1;
graph->edge_num++;
}
// 深度优先遍历
void dfs(GraphMatrix *graph, int vertex, int *visited) {
int i;
visited[vertex] = 1;
printf("%d ", graph->vertex[vertex]);
for (i = 0; i < graph->vertex_num; i++) {
if (graph->edge[vertex][i] && !visited[i]) {
dfs(graph, i, visited);
}
}
}
// 广度优先遍历
void bfs(GraphMatrix *graph, int start, int *visited) {
int queue[MAX_VERTEX_NUM];
int front = 0, rear = 0;
int i, vertex;
visited[start] = 1;
printf("%d ", graph->vertex[start]);
queue[rear++] = start;
while (front != rear) {
vertex = queue[front++];
for (i = 0; i < graph->vertex_num; i++) {
if (graph->edge[vertex][i] && !visited[i]) {
visited[i] = 1;
printf("%d ", graph->vertex[i]);
queue[rear++] = i;
}
}
}
}
int main() {
GraphMatrix graph;
int visited[MAX_VERTEX_NUM] = {0};
int i;
initGraph(&graph);
// 添加顶点
for (i = 0; i < 6; i++) {
addVertex(&graph, i);
}
// 添加边
addEdge(&graph, 0, 1);
addEdge(&graph, 0, 2);
addEdge(&graph, 1, 3);
addEdge(&graph, 1, 4);
addEdge(&graph, 2, 4);
addEdge(&graph, 3, 5);
addEdge(&graph, 4, 5);
// 深度优先遍历
printf("深度优先遍历:");
dfs(&graph, 0, visited);
printf("\n");
// 广度优先遍历
for (i = 0; i < MAX_VERTEX_NUM; i++) {
visited[i] = 0;
}
printf("广度优先遍历:");
bfs(&graph, 0, visited);
printf("\n");
return 0;
}
```
在这个代码中,我们首先定义了一个邻接矩阵结构体,包含顶点数组、边矩阵、顶点数和边数。然后我们实现了初始化邻接矩阵、添加顶点和添加边的函数。接着实现了深度优先遍历和广度优先遍历的函数,分别使用递归和队列进行遍历。最后在主函数中创建一个图,并进行深度优先遍历和广度优先遍历。
以上就是使用C语言实现图的深度优先和广度优先遍历的完整代码,希望对你有所帮助!
相关推荐













