如何用C++实现深度优先搜索(DFS)算法?
时间: 2024-11-03 19:12:47 浏览: 3
在C++中,我们可以使用递归或栈数据结构来实现深度优先搜索(DFS)。下面是一个基本的递归版本的DFS示例,假设我们有一个图的邻接列表表示:
```cpp
#include <iostream>
#include <vector>
#include <stack>
// 用于表示图的节点
struct Node {
int value;
std::vector<int> neighbors;
};
void dfs(Node* node, std::vector<bool>& visited) {
// 标记当前节点已访问
visited[node->value] = true;
std::cout << "Visiting node: " << node->value << "\n";
// 遍历邻居并继续搜索未访问的节点
for (int neighbor : node->neighbors) {
if (!visited[neighbor]) {
dfs(node->neighbors.data() + neighbor, visited);
}
}
}
int main() {
// 初始化图节点和访问标志向量
Node nodes[] = { ... }; // 定义你的图节点
std::vector<bool> visited(nodes.size(), false);
// 从任意起点开始搜索
dfs(nodes[0], visited);
return 0;
}
```
在这个例子中,`dfs`函数接受一个节点和一个表示是否已访问过的布尔向量。它首先标记当前节点为已访问,然后遍历相邻的未访问节点,并对它们递归地调用`dfs`。
阅读全文