洛谷P5318 【深基18.例3】查找文献 题解 简单DFS/BFS
题目链接:https://www.luogu.com.cn/problem/P5318
题目大意:求图的dfs序及bfs序。
视频讲解地址:https://www.bilibili.com/video/BV1nuFve9Ecu/
示例程序:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int n, m;
bool vis[maxn]; // vis[u] 表示节点u有没有访问过
vector<int> g[maxn]; // g[u] 都是一个vector,g[u]保存了u连向的所有点
// dfs
void dfs(int u) {
vis[u] = true;
cout << u << " ";
for (auto v : g[u])
if (!vis[v])
dfs(v);
}
// bfs
void bfs() {
queue<int> que; // 队列
fill(vis+1, vis+n+1, false);
vis[1] = true;
que.push(1);
while (!que.empty()) {
int u = que.front();
que.pop();
cout << u << " ";
for (auto v : g[u])
if (!vis[v])
vis[v] = true, que.push(v);
}
}
int main() {
cin >> n >> m;
while (m--) {
int u, v;
cin >> u >> v;
g[u].push_back(v);
}
for (int i = 1; i <= n; i++)
sort(g[i].begin(), g[i].end());
dfs(1);
cout << endl;
bfs();
return 0;
}
浙公网安备 33010602011771号