以下是使用 C++ 编写的深度优先搜索 (DFS) 示例代码,该代码可以用来计算图中连通分量的数量。

#include <iostream>
#include <vector>
#include <queue>

using namespace std;

void dfs(int node, vector<bool>& visited, vector<vector<int>>& graph) {
    visited[node] = true;
    for (int neighbor : graph[node]) {
        if (!visited[neighbor]) {
            dfs(neighbor, visited, graph);
        }
    }
}

int main() {
    int n, m;
    cin >> n >> m;

    vector<vector<int>> graph(n + 1);
    for (int i = 0; i < m; i++) {
        int k;
        cin >> k;
        vector<int> accounts(k);
        for (int j = 0; j < k; j++) {
            cin >> accounts[j];
        }
        for (int j = 0; j < k; j++) {
            for (int l = j + 1; l < k; l++) {
                graph[accounts[j]].push_back(accounts[l]);
                graph[accounts[l]].push_back(accounts[j]);
            }
        }
    }

    vector<bool> visited(n + 1, false);
    int count = 0;
    for (int i = 1; i <= n; i++) {
        if (!visited[i]) {
            dfs(i, visited, graph);
            count++;
        }
    }

    cout << count << endl;

    return 0;
}

代码解析:

  • dfs(node, visited, graph) 函数:

    • 递归地遍历图,从 node 节点开始,标记访问过的节点并继续访问其未访问的邻居。
  • main() 函数:

    • 首先,从标准输入读取图的节点数 n 和边数 m
    • 创建一个邻接列表 graph 来表示图,其中 graph[i] 保存与节点 i 相连的节点列表。
    • 使用一个 visited 数组来跟踪每个节点是否已被访问过。
    • 使用一个计数器 count 来统计连通分量的数量。
    • 遍历所有节点,如果一个节点未被访问,则从该节点开始进行 DFS 遍历,并增加 count 的值。
    • 最后,输出 count 的值,表示图中连通分量的数量。

应用场景:

深度优先搜索 (DFS) 是一种常用的图遍历算法,在各种应用场景中都有广泛的应用,例如:

  • 查找图中的连通分量
  • 寻找图中两点之间的路径
  • 拓扑排序
  • 解决迷宫问题
  • 检测图中的环路

总结:

本文提供了一个 C++ 实现深度优先搜索 (DFS) 的代码示例,并详细解释了代码逻辑和应用场景。通过分析示例代码,读者可以学习如何使用 DFS 算法解决各种问题。

希望这可以帮助到你!

C++ 深度优先搜索 (DFS) 代码示例 - 详解与应用

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

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