📅  最后修改于: 2023-12-03 14:39:57.007000             🧑  作者: Mango
DFS(Depth-First Search,深度优先搜索)是一种常用于遍历或搜索图和树的算法。在C++中,我们可以通过递归或使用栈来实现DFS算法。下面是一个使用C++编写的DFS程序的示例。
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
// 定义图的邻接表表示
vector<vector<int>> graph;
// 深度优先搜索函数
void dfs(int start, vector<bool>& visited) {
// 标记当前节点为已访问
visited[start] = true;
// 输出当前节点
cout << start << " ";
// 遍历当前节点的邻接节点
for (int i = 0; i < graph[start].size(); i++) {
int neighbor = graph[start][i];
// 如果邻接节点未被访问,则递归调用DFS函数
if (!visited[neighbor]) {
dfs(neighbor, visited);
}
}
}
// 主函数
int main() {
int n; // 图的节点数量
int m; // 图的边数量
cout << "Enter the number of nodes: ";
cin >> n;
cout << "Enter the number of edges: ";
cin >> m;
// 初始化图的邻接表
graph.resize(n);
cout << "Enter the edges: " << endl;
for (int i = 0; i < m; i++) {
int u, v; // 边的起点和终点
cin >> u >> v;
// 添加边到邻接表
graph[u].push_back(v);
graph[v].push_back(u);
}
// 初始化节点访问数组
vector<bool> visited(n, false);
cout << "DFS traversal starting from node 0: " << endl;
dfs(0, visited);
return 0;
}
iostream
、vector
和 stack
,用于输入输出、存储图的邻接表和辅助栈。graph
来存储图的邻接表表示。邻接表是一个二维向量,每个顶点对应一个一维向量,存储与该顶点相邻的顶点。dfs
,它接受一个起始节点和一个 visited
数组作为参数。在 dfs
函数中,我们首先将当前节点标记为已访问,然后遍历它的邻接节点,如果邻接节点未被访问,则递归调用 dfs
函数访问该节点。visited
数组,用于标记节点是否已被访问。最后,调用 dfs
函数从节点 0 开始进行深度优先遍历,并输出遍历结果。编译程序:在命令行中使用以下命令编译程序:
g++ dfs.cpp -o dfs
运行程序:在命令行中使用以下命令运行程序:
./dfs
根据程序提示依次输入节点数量、边数量和每条边的起点和终点,然后程序将输出深度优先遍历结果。
注意:在实际使用中,需要根据实际情况修改程序以适应特定的问题和数据结构。这只是一个基本的DFS算法示例,可以根据需要进行扩展和改进。
希望这个示例能帮助你理解和实现C++中的DFS算法!