深度优先搜索DFS的C++实现
深度优先搜索算法是一种用于遍历或搜索树或图的算法,其精髓在于递归求解问题的思路以及回溯的处理。本文将详细介绍用C++语言实现深度优先搜索的过程,并提供完整的源代码。
实现思路
首先,我们需要定义一个图的数据结构。可以用vector容器存储图中每个节点的邻接表。下面的代码定义了一个Node类表示节点:
class Node {
public:
int id; // 节点的编号
vector<int> neighbors; // 邻居列表
bool visited; // 是否已经访问过该节点
Node(int id) {
this->id = id;
visited = false;
}
};
定义完节点后,需要定义一个函数来实现深度优先搜索。搜索过程中,我们需要对每个节点进行遍历,而每个节点可能联通着其他节点,因此需要用递归的方式进行遍历。为了避免死循环,我们需要记录已经访问过的节点,并在递归时加以判断。
void dfs(Node& node) {
node.visited = true;
cout << node.id << " "; // 输出当前节点编号
// 遍历该节点的邻居
for (int i = 0; i < node.neighbors.size(); i++) {
int neighborId = node.neighbors[i];
Node& neighbor = nodes[neighborId];
if (!neighbor.visited) {
dfs(neighbo