如何在C++中实现DFS和BFS算法?
时间: 2024-09-29 08:05:38 浏览: 35
在C++中,你可以使用邻接表来表示图,这样可以更有效地实现深度优先搜索(DFS)和广度优先搜索(BFS)。下面是简单的实现:
**深度优先搜索(DFS)**:
```cpp
#include <iostream>
#include <vector>
using namespace std;
void dfs(int node, vector<vector<int>>& graph, vector<bool>& visited) {
visited[node] = true;
cout << node << " ";
for (int neighbor : graph[node]) {
if (!visited[neighbor]) {
dfs(neighbor, graph, visited);
}
}
}
// 主函数调用DFS
void dfsOnGraph(vector<vector<int>>& graph) {
int numVertices = graph.size();
vector<bool> visited(numVertices, false);
for (int i = 0; i < numVertices; ++i) {
if (!visited[i]) {
dfs(i, graph, visited);
}
}
}
```
**广度优先搜索(BFS)**:
```cpp
#include <queue>
void bfs(int startNode, vector<vector<int>>& graph, vector<bool>& visited) {
queue<int> q;
visited[startNode] = true;
q.push(startNode);
while (!q.empty()) {
int currentNode = q.front();
q.pop();
cout << currentNode << " ";
for (int neighbor : graph[currentNode]) {
if (!visited[neighbor]) {
visited[neighbor] = true;
q.push(neighbor);
}
}
}
}
// 主函数调用BFS
void bfsOnGraph(vector<vector<int>>& graph) {
int numVertices = graph.size();
vector<bool> visited(numVertices, false);
bfs(0, graph, visited); // 假设从节点0开始
}
```
上述代码假设`graph`是一个邻接列表,其中`graph[node]`存储与节点`node`相连的所有邻居。`visited`数组用于跟踪已访问过的节点。
阅读全文