编写一个dfs模板C++
以下是一个DFS模板的C++实现:
#include <iostream>
#include <vector>
using namespace std;
void dfs(int node, vector<vector<int>>& graph, vector<bool>& visited) {
// 标记当前节点为已访问
visited[node] = true;
// 处理当前节点
cout << "Visiting node: " << node << endl;
// 遍历当前节点的邻居节点
for (int i = 0; i < graph[node].size(); i++) {
int neighbor = graph[node][i];
// 如果邻居节点未访问过,则进行DFS遍历
if (!visited[neighbor]) {
dfs(neighbor, graph, visited);
}
}
}
int main() {
// 创建图的邻接表表示
vector<vector<int>> graph = {
{1, 2}, // 0节点的邻居节点是1和2
{0, 3, 4}, // 1节点的邻居节点是0、3和4
{0, 5}, // 2节点的邻居节点是0和5
{1}, // 3节点的邻居节点是1
{1, 5}, // 4节点的邻居节点是1和5
{2, 4} // 5节点的邻居节点是2和4
};
int numNodes = graph.size();
vector<bool> visited(numNodes, false);
// 从第一个节点开始进行DFS遍历
dfs(0, graph, visited);
return 0;
}
在这个模板中,我们假设图是用邻接表表示的,其中graph是一个二维向量,每个元素表示一个节点及其邻居节点。visited是一个布尔向量,用于记录节点是否已访问过。
在dfs函数中,我们首先将当前节点标记为已访问,然后处理当前节点。接下来,我们遍历当前节点的邻居节点,如果邻居节点未访问过,则进行递归调用dfs函数。
在main函数中,我们创建了一个示例图,并初始化了visited向量。然后,从第一个节点开始进行DFS遍历。
运行上述代码,将会输出如下结果:
Visiting node: 0
Visiting node: 1
Visiting node: 3
Visiting node: 4
Visiting node: 5
Visiting node: 2
这表示DFS按照深度优先的顺序遍历了图中的所有节点
原文地址: https://www.cveoy.top/t/topic/ioE1 著作权归作者所有。请勿转载和采集!