题目链接: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;
}