用c++实现深搜
时间: 2023-07-28 09:06:47 浏览: 95
C++深度搜索
5星 · 资源好评率100%
好的,以下是 C++ 实现深度优先搜索的代码示例:
```cpp
#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
unordered_set<int> visited; // 记录已经访问过的节点
void dfs(int node, vector<vector<int>>& graph) {
if (visited.count(node) != 0) {
return;
}
visited.insert(node);
// 处理当前节点
for (int neighbor : graph[node]) {
dfs(neighbor, graph); // 递归访问未访问过的邻居节点
}
}
int main() {
vector<vector<int>> graph = {
{1, 2}, // 0 号节点的邻居节点为 1 和 2
{0, 2}, // 1 号节点的邻居节点为 0 和 2
{0, 1, 3}, // 2 号节点的邻居节点为 0、1 和 3
{2} // 3 号节点的邻居节点为 2
};
dfs(0, graph); // 从 0 号节点开始深度优先搜索
return 0;
}
```
在这个示例中,我们定义了一个 `visited` 哈希集合来记录已经访问过的节点。`dfs` 函数的第一个参数是当前节点,第二个参数是图的邻接表表示。首先检查当前节点是否已经被访问过,如果是,则直接返回。否则,将当前节点加入到 `visited` 集合中,然后遍历当前节点的邻居节点,如果某个邻居节点还没有被访问过,则递归调用 `dfs` 函数访问该节点。最后,在 `main` 函数中,我们调用 `dfs` 函数从 0 号节点开始深度优先搜索整个图。
阅读全文