dfs和bfs算法实现c++
时间: 2023-06-18 10:03:17 浏览: 76
DFS(深度优先搜索)和BFS(广度优先搜索)是两种常见的图形遍历算法。下面是它们的C++实现:
DFS:
```c++
#include <iostream>
#include <vector>
using namespace std;
vector<int> adj[100001]; // 邻接表
bool visited[100001]; // 记录是否访问过
void dfs(int node) {
visited[node] = true; // 标记为已访问
cout << node << " "; // 输出节点值
for (int i = 0; i < adj[node].size(); i++) {
int next = adj[node][i];
if (!visited[next]) { // 如果下一个节点没有被访问过
dfs(next); // 继续访问下一个节点
}
}
}
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u); // 无向图需要添加反向边
}
// 从1号节点开始遍历
dfs(1);
return 0;
}
```
BFS:
```c++
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
vector<int> adj[100001]; // 邻接表
bool visited[100001]; // 记录是否访问过
void bfs(int start) {
queue<int> q;
q.push(start); // 将起始节点加入队列
visited[start] = true; // 标记为已访问
while (!q.empty()) {
int node = q.front();
q.pop();
cout << node << " "; // 输出节点值
for (int i = 0; i < adj[node].size(); i++) {
int next = adj[node][i];
if (!visited[next]) { // 如果下一个节点没有被访问过
visited[next] = true; // 标记为已访问
q.push(next); // 加入队列中
}
}
}
}
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u); // 无向图需要添加反向边
}
// 从1号节点开始遍历
bfs(1);
return 0;
}
```
阅读全文