DFS
代码实现
#include <iostream>
#include <vector>
using namespace std;
void dfs(int node, vector<bool>& visited, vector<vector<int>>& graph) {
// 检查是否已访问过该节点
if (visited[node]) {
return;
}
// 标记当前节点为已访问
visited[node] = true;
// 在此处对节点进行相应的操作
// 递归地访问当前节点的邻居节点
for (int i = 0; i < graph[node].size(); i++) {
int neighbor = graph[node][i];
dfs(neighbor, visited, graph);
}
}
int main() {
int nodes = 6;
// 创建邻接矩阵或邻接表表示的图
vector<vector<int>> graph(nodes);
graph[0].push_back(1);
graph[0].push_back(2);
graph[1].push_back(3);
graph[1].push_back(4);
graph[2].push_back(5);
// 创建一个 visited 数组,用于记录访问状态
vector<bool> visited(nodes, false);
// 从起始节点开始进行 DFS
dfs(0, visited, graph);
return 0;
}
解释
在上述模版中,graph
是一个表示图的邻接矩阵或邻接表。visited
是一个表示节点访问状态的数组,初始时所有节点的访问状态都为 false
。dfs
函数用于进行深度优先搜索,其中 node
表示要访问的当前节点,visited
是节点访问状态的数组,graph
是图的表示方式。在每次递归调用 dfs
函数时,首先检查当前节点是否已经访问过,如果是则返回,否则将当前节点标记为已访问,并进行相应的操作。然后,递归地调用 dfs
函数访问当前节点的邻居节点,直到所有节点都被访问完毕。