21xrx.com
2025-03-25 01:21:52 Tuesday
文章检索 我的文章 写文章
C++深度优先搜索代码
2023-07-05 16:40:53 深夜i     16     0
C++ 深度优先搜索 代码

深度优先搜索是一种基本的搜索算法,用于搜索图或树的所有节点。其核心思想是从起点开始,不断向下搜索直到到达终点或者无法继续下去为止。下面是一个C++深度优先搜索的代码示例:

#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> graph;  //定义一个邻接矩阵表示图
vector<bool> visited;    //定义一个记录节点是否已被访问的数组
//深度优先搜索函数
void dfs(int node) {
  //标记当前节点已被访问
  visited[node] = true;
  //输出当前节点
  cout << node << " ";
  //遍历与当前节点相邻的所有节点
  for (int i = 0; i < graph[node].size(); i++) {
    int next_node = graph[node][i];
    //如果节点未被访问,则递归搜索该节点
    if (!visited[next_node]) {
      dfs(next_node);
    }
  }
}
int main() {
  int n, m;
  cin >> n >> m;
  graph.resize(n+1);
  visited.resize(n+1, false);
  //读入图
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    graph[u].push_back(v);
    graph[v].push_back(u);
  }
  //从节点1开始进行深度优先搜索
  dfs(1);
  return 0;
}

在上述代码中,我们使用vector >来表示图的邻接矩阵,同时使用visited数组来记录每个节点是否已经被访问。在dfs函数中,我们首先标记当前节点已被访问,并输出当前节点。接着我们遍历与当前节点相邻的所有节点,如果该节点未被访问,则递归调用dfs函数进行搜索。

在主函数中,我们首先读入图的节点数n和边数m,然后resize邻接矩阵和visited数组,并使用for循环读入每条边,将边的两个节点加入到对应的邻接表中。最后,我们从节点1开始进行深度优先搜索,输出搜索结果即可。

综上所述,这是一份简单的C++深度优先搜索代码,并且可以应用于各种场景,如网络爬虫、迷宫寻路等问题。

  
  

评论区

请求出错了