C++ 图遍历算法:深度优先搜索 (DFS) 实现
以下是一个深度优先搜索遍历无向图的示例代码,使用 C++ 实现:
#include <iostream>
#include <vector>
using namespace std;
void DFS(vector<vector<int>>& graph, int node, vector<bool>& visited) {
visited[node] = true;
cout << node << ' ';
for (int i = 0; i < graph[node].size(); i++) {
int neighbor = graph[node][i];
if (!visited[neighbor]) {
DFS(graph, neighbor, visited);
}
}
}
void traverseGraph(vector<vector<int>>& graph) {
int n = graph.size();
vector<bool> visited(n, false);
for (int i = 0; i < n; i++) {
if (!visited[i]) {
DFS(graph, i, visited);
}
}
}
int main() {
vector<vector<int>> graph = {{1, 2}, {0, 2}, {0, 1, 3}, {2, 4}, {3}};
traverseGraph(graph);
return 0;
}
该代码创建了一个无向图,其中节点 0 与节点 1、2 相连,节点 1 与节点 0、2 相连,节点 2 与节点 0、1、3 相连,节点 3 与节点 2、4 相连,节点 4 与节点 3 相连。
首先,我们定义了一个 DFS 函数,用于深度优先搜索遍历图。该函数接收三个参数:图、当前节点以及访问状态数组。它首先将当前节点标记为已访问,并打印该节点。然后,它遍历所有与该节点相邻的节点,如果一个节点未被访问,则递归调用 DFS 函数,以遍历该节点及其子树。
接下来,我们定义了一个 traverseGraph 函数,它遍历所有未访问的节点,并调用 DFS 函数进行搜索。
最后,我们在 main 函数中创建了一个图,并调用 traverseGraph 函数进行遍历。
代码解释:
graph变量是一个二维向量,用于表示图的邻接矩阵。每个元素代表一个节点,其值为与其相连的节点的列表。visited变量是一个布尔向量,用于记录每个节点是否已被访问。DFS函数递归遍历图,将当前节点标记为已访问,并递归遍历其所有未访问的邻居。traverseGraph函数遍历图中的所有节点,并对每个未访问的节点调用DFS函数。
示例输出:
0 1 2 3 4
注意:
- 该代码示例使用邻接矩阵来表示图。您也可以使用邻接列表来表示图。
- 该代码只遍历了图中所有可达的节点。如果图不连通,则需要从多个起点调用
DFS函数以遍历整个图。 - 该代码打印了每个节点的访问顺序。您可以根据需要修改代码来执行其他操作,例如计算图的深度或路径。
原文地址: https://www.cveoy.top/t/topic/mEX3 著作权归作者所有。请勿转载和采集!