📜  c++中的dfs程序(1)

📅  最后修改于: 2023-12-03 14:39:57.007000             🧑  作者: Mango

C++中的DFS程序

DFS(Depth-First Search,深度优先搜索)是一种常用于遍历或搜索图和树的算法。在C++中,我们可以通过递归或使用栈来实现DFS算法。下面是一个使用C++编写的DFS程序的示例。

程序示例
#include <iostream>
#include <vector>
#include <stack>

using namespace std;

// 定义图的邻接表表示
vector<vector<int>> graph;

// 深度优先搜索函数
void dfs(int start, vector<bool>& visited) {
    // 标记当前节点为已访问
    visited[start] = true;

    // 输出当前节点
    cout << start << " ";

    // 遍历当前节点的邻接节点
    for (int i = 0; i < graph[start].size(); i++) {
        int neighbor = graph[start][i];

        // 如果邻接节点未被访问,则递归调用DFS函数
        if (!visited[neighbor]) {
            dfs(neighbor, visited);
        }
    }
}

// 主函数
int main() {
    int n; // 图的节点数量
    int m; // 图的边数量

    cout << "Enter the number of nodes: ";
    cin >> n;

    cout << "Enter the number of edges: ";
    cin >> m;

    // 初始化图的邻接表
    graph.resize(n);
    
    cout << "Enter the edges: " << endl;
    for (int i = 0; i < m; i++) {
        int u, v; // 边的起点和终点
        cin >> u >> v;

        // 添加边到邻接表
        graph[u].push_back(v);
        graph[v].push_back(u);
    }

    // 初始化节点访问数组
    vector<bool> visited(n, false);

    cout << "DFS traversal starting from node 0: " << endl;
    dfs(0, visited);

    return 0;
}
代码解释
  1. 首先,我们包含了必要的头文件 iostreamvectorstack,用于输入输出、存储图的邻接表和辅助栈。
  2. 然后,我们声明了一个全局变量 graph 来存储图的邻接表表示。邻接表是一个二维向量,每个顶点对应一个一维向量,存储与该顶点相邻的顶点。
  3. 接下来,我们定义了一个深度优先搜索函数 dfs,它接受一个起始节点和一个 visited 数组作为参数。在 dfs 函数中,我们首先将当前节点标记为已访问,然后遍历它的邻接节点,如果邻接节点未被访问,则递归调用 dfs 函数访问该节点。
  4. 在主函数中,我们首先获取图的节点数量和边数量,并根据节点数量初始化邻接表。然后,通过用户输入添加边到邻接表。接着,我们初始化一个 visited 数组,用于标记节点是否已被访问。最后,调用 dfs 函数从节点 0 开始进行深度优先遍历,并输出遍历结果。
  5. 程序通过标准输入和输出进行交互,用户需要按照程序提示依次输入节点数量、边数量和每条边的起点和终点。然后,程序会输出从节点 0 开始的深度优先遍历结果。
使用说明
  1. 编译程序:在命令行中使用以下命令编译程序:

    g++ dfs.cpp -o dfs
    
  2. 运行程序:在命令行中使用以下命令运行程序:

    ./dfs
    
  3. 根据程序提示依次输入节点数量、边数量和每条边的起点和终点,然后程序将输出深度优先遍历结果。

注意:在实际使用中,需要根据实际情况修改程序以适应特定的问题和数据结构。这只是一个基本的DFS算法示例,可以根据需要进行扩展和改进。

希望这个示例能帮助你理解和实现C++中的DFS算法!