帮我写一个dfs模板用C++
时间: 2024-04-30 22:23:35 浏览: 46
以下是一个基本的DFS模板,使用C语言实现:
```C
#include <stdio.h>
#define MAX_N 100 // 最大节点数
#define MAX_M 100 // 最大边数
int n, m; // 节点数和边数
int g[MAX_N][MAX_M]; // 存储图的邻接表
int visited[MAX_N]; // 标记节点是否被访问过
void dfs(int u) {
visited[u] = 1; // 标记节点u已经被访问过
printf("%d ", u); // 打印节点u
for (int i = 0; i < m; i++) {
int v = g[u][i]; // v为与节点u相邻的节点
if (!visited[v]) { // 如果节点v还没有被访问过
dfs(v); // 递归访问节点v
}
}
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 0; i < m; i++) {
int u, v;
scanf("%d%d", &u, &v);
g[u][i] = v; // 存储邻接表
}
dfs(0); // 从节点0开始进行DFS遍历
return 0;
}
```
在以上代码中,我们首先读入了节点数n和边数m,然后通过邻接表的方式存储了图。在DFS遍历中,我们从节点0开始递归访问与之相邻的节点,并且在访问每个节点时打印出该节点的编号。同时,对于每个节点,我们使用visited数组来标记它是否已经被访问过,以免出现重复访问的情况。
阅读全文