用C语言建立一个无向图的邻接矩阵表示,实现对图的深度优先
时间: 2024-05-10 16:19:43 浏览: 75
遍历和广度优先遍历。
以下是实现深度优先遍历的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTICES 100
typedef struct Graph {
int num_vertices;
int adjacency_matrix[MAX_VERTICES][MAX_VERTICES];
} Graph;
void init_graph(Graph *g, int num_vertices) {
g->num_vertices = num_vertices;
for (int i = 0; i < num_vertices; i++) {
for (int j = 0; j < num_vertices; j++) {
g->adjacency_matrix[i][j] = 0;
}
}
}
void add_edge(Graph *g, int src, int dest) {
g->adjacency_matrix[src][dest] = 1;
g->adjacency_matrix[dest][src] = 1;
}
void dfs(Graph *g, int vertex, int *visited) {
visited[vertex] = 1;
printf("%d ", vertex);
for (int i = 0; i < g->num_vertices; i++) {
if (g->adjacency_matrix[vertex][i] && !visited[i]) {
dfs(g, i, visited);
}
}
}
void depth_first_traversal(Graph *g, int start_vertex) {
int visited[MAX_VERTICES] = {0};
dfs(g, start_vertex, visited);
}
int main() {
Graph g;
init_graph(&g, 6);
add_edge(&g, 0, 1);
add_edge(&g, 0, 2);
add_edge(&g, 1, 2);
add_edge(&g, 2, 3);
add_edge(&g, 3, 4);
add_edge(&g, 4, 1);
depth_first_traversal(&g, 0);
printf("\n");
return 0;
}
```
这里使用了一个邻接矩阵来表示图,其中 `adjacency_matrix[i][j]` 表示顶点 `i` 和顶点 `j` 是否相邻。在 `dfs` 函数中,首先将当前顶点标记为已访问,然后输出当前顶点的编号。接着遍历与当前顶点相邻的顶点,如果该顶点未被访问过,则递归调用 `dfs` 函数访问该顶点。
在 `depth_first_traversal` 函数中,我们首先创建一个数组 `visited` 来记录每个顶点是否已经被访问。然后从起始顶点开始,调用 `dfs` 函数进行深度优先遍历。
输出结果为:
```
0 1 2 3 4
```
阅读全文