以下是一个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按照深度优先的顺序遍历了图中的所有节点

编写一个dfs模板C++

原文地址: https://www.cveoy.top/t/topic/ioE1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录