帮我用C++写一段dfs
时间: 2024-02-28 14:30:19 浏览: 49
以下是一个简单的DFS示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100 // 最大顶点数
int visited[MAXN]; // 标记顶点是否被访问过
int graph[MAXN][MAXN]; // 存储图的邻接矩阵
int n; // 顶点数
void dfs(int v) {
visited[v] = 1; // 标记当前顶点为已访问
printf("%d ", v); // 输出当前顶点
for (int i = 0; i < n; i++) {
if (graph[v][i] && !visited[i]) { // 如果顶点i与当前顶点v有连边且未被访问过
dfs(i); // 递归访问顶点i
}
}
}
int main() {
// 读入图的顶点数和邻接矩阵
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &graph[i][j]);
}
}
// 遍历所有连通块
for (int i = 0; i < n; i++) {
if (!visited[i]) {
dfs(i);
}
}
return 0;
}
```
该示例代码使用邻接矩阵存储图,并使用visited数组标记顶点是否被访问过。在dfs函数中,先标记当前顶点为已访问,然后输出该顶点,接着遍历与该顶点有连边且未被访问的顶点,并递归访问这些顶点。最后,在主函数中遍历所有连通块,对每个未被访问的顶点进行DFS。
阅读全文