21xrx.com
2024-12-22 20:42:24 Sunday
登录
文章检索 我的文章 写文章
C++深度优先搜索代码
2023-07-05 16:40:53 深夜i     --     --
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++深度优先搜索代码,并且可以应用于各种场景,如网络爬虫、迷宫寻路等问题。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复