C语言完成图的深度优先遍历
时间: 2023-07-24 10:06:46 浏览: 82
以下是使用C语言实现图的深度优先遍历的示例代码:
```c
#include<stdio.h>
#include<stdlib.h>
#define MAX 10
int visited[MAX] = {0};
struct Graph {
int V;
int E;
int **adj;
};
struct Graph * createGraph(int V, int E) {
struct Graph *G = malloc(sizeof(struct Graph));
G->V = V;
G->E = E;
G->adj = malloc(sizeof(int*) * V);
for (int i = 0; i < V; i++) {
G->adj[i] = calloc(V, sizeof(int));
}
return G;
}
void addEdge(struct Graph *G, int u, int v) {
G->adj[u][v] = 1;
G->adj[v][u] = 1;
}
void DFS(struct Graph *G, int v) {
visited[v] = 1;
printf("%d ", v);
for (int i = 0; i < G->V; i++) {
if (G->adj[v][i] == 1 && visited[i] == 0) {
DFS(G, i);
}
}
}
int main() {
int V = 5, E = 4;
struct Graph *G = createGraph(V, E);
addEdge(G, 0, 1);
addEdge(G, 0, 2);
addEdge(G, 1, 3);
addEdge(G, 2, 4);
printf("Depth First Traversal: ");
DFS(G, 0);
return 0;
}
```
在上面的示例代码中,我们首先定义了一个图结构,其中包含节点数(V),边数(E)和邻接矩阵(adj)。然后,我们使用 `addEdge()` 函数向图中添加边。
接下来我们定义了 `DFS()` 函数,该函数实现了深度优先遍历算法。`DFS()` 函数首先将当前节点标记为已访问,然后打印该节点的值。然后递归访问与该节点相连的未访问过的节点,直到所有节点都被访问过为止。
最后,在 `main()` 函数中,我们创建一个图并调用 `DFS()` 函数来遍历图的所有节点。
阅读全文