以下是一个深度优先搜索遍历无向图的示例代码,使用 C++ 实现:

#include <iostream>
#include <vector>

using namespace std;

void DFS(vector<vector<int>>& graph, int node, vector<bool>& visited) {
    visited[node] = true;
    cout << node << ' ';

    for (int i = 0; i < graph[node].size(); i++) {
        int neighbor = graph[node][i];
        if (!visited[neighbor]) {
            DFS(graph, neighbor, visited);
        }
    }
}

void traverseGraph(vector<vector<int>>& graph) {
    int n = graph.size();
    vector<bool> visited(n, false);

    for (int i = 0; i < n; i++) {
        if (!visited[i]) {
            DFS(graph, i, visited);
        }
    }
}

int main() {
    vector<vector<int>> graph = {{1, 2}, {0, 2}, {0, 1, 3}, {2, 4}, {3}};
    traverseGraph(graph);
    return 0;
}

该代码创建了一个无向图,其中节点 0 与节点 1、2 相连,节点 1 与节点 0、2 相连,节点 2 与节点 0、1、3 相连,节点 3 与节点 2、4 相连,节点 4 与节点 3 相连。

首先,我们定义了一个 DFS 函数,用于深度优先搜索遍历图。该函数接收三个参数:图、当前节点以及访问状态数组。它首先将当前节点标记为已访问,并打印该节点。然后,它遍历所有与该节点相邻的节点,如果一个节点未被访问,则递归调用 DFS 函数,以遍历该节点及其子树。

接下来,我们定义了一个 traverseGraph 函数,它遍历所有未访问的节点,并调用 DFS 函数进行搜索。

最后,我们在 main 函数中创建了一个图,并调用 traverseGraph 函数进行遍历。

代码解释:

  • graph 变量是一个二维向量,用于表示图的邻接矩阵。每个元素代表一个节点,其值为与其相连的节点的列表。
  • visited 变量是一个布尔向量,用于记录每个节点是否已被访问。
  • DFS 函数递归遍历图,将当前节点标记为已访问,并递归遍历其所有未访问的邻居。
  • traverseGraph 函数遍历图中的所有节点,并对每个未访问的节点调用 DFS 函数。

示例输出:

0 1 2 3 4

注意:

  • 该代码示例使用邻接矩阵来表示图。您也可以使用邻接列表来表示图。
  • 该代码只遍历了图中所有可达的节点。如果图不连通,则需要从多个起点调用 DFS 函数以遍历整个图。
  • 该代码打印了每个节点的访问顺序。您可以根据需要修改代码来执行其他操作,例如计算图的深度或路径。
C++ 图遍历算法:深度优先搜索 (DFS) 实现

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

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