用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函数进行遍历。
原文地址: http://www.cveoy.top/t/topic/bd89 著作权归作者所有。请勿转载和采集!