深度优先搜索(DFS)是一种用于遍历图或树的算法,它从一个起始节点开始,递归地遍历每个邻居节点,直到没有未访问的节点为止。在C++中实现DFS可以使用递归或堆栈数据结构来实现。
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
// 定义图节点结构体
struct Node {
int value;
vector<Node*> neighbors;
bool visited = false; // 判断该节点是否被访问过
};
// 递归实现DFS遍历
void dfsRecursive(Node* node) {
if (node == nullptr) return;
node->visited = true;
cout << node->value << " ";
for (auto neighbor : node->neighbors) {
if (!neighbor->visited) dfsRecursive(neighbor);
}
}
// 使用堆栈实现DFS遍历
void dfsStack(Node* node) {
if (node == nullptr) return;
stack<Node*> s;
s.push(node);
node->visited = true;
while (!s.empty()) {
Node* curr = s.top();
s.pop();
cout << curr->value << " ";
for (auto neighbor : curr->neighbors) {
if (!neighbor->visited) {
neighbor->visited = true;
s.push(neighbor);
}
}
}
}
int main() {
// 构造一个简单的无向图
Node* n1 = new Node{1};
Node* n2 = new Node{2};
Node* n3 = new Node{3};
Node* n4 = new Node{4};
n1->neighbors.push_back(n2);
n1->neighbors.push_back(n3);
n2->neighbors.push_back(n1);
n2->neighbors.push_back(n4);
n3->neighbors.push_back(n1);
n3->neighbors.push_back(n4);
n4->neighbors.push_back(n2);
n4->neighbors.push_back(n3);
// 递归实现DFS遍历
dfsRecursive(n1);
cout << endl;
// 使用堆栈实现DFS遍历
dfsStack(n1);
cout << endl;
// 释放动态分配的节点内存
delete n1;
delete n2;
delete n3;
delete n4;
return 0;
}
输出结果:
1 2 4 3
1 3 4 2
其中,第一行是递归实现的DFS遍历结果,第二行是使用堆栈实现的DFS遍历结果。