洛谷 P5318查找文献
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 100010;
int h[N], ne[N], e[N], idx;
int q[N];
int n, m;
vector<int> v[N];
bool st[N], d[N];
void bfs()
{
int hh = 0, tt = 0;
q[0] = 1, d[1] = true;
while(hh <= tt)
{
int s = q[hh ++ ];
cout << s << ' ';
for(int i = 0; i < v[s].size(); i ++ )
{
if(!d[v[s][i]])
{
q[++ tt] = v[s][i], d[v[s][i]] = true;
}
}
}
}
void dfs(int n, int u)
{
st[n] = true;
if(!u)
{
cout << n << ' ';
return ;
}
cout << n << ' ';
for(int i = 0; i < v[n].size(); i ++ )
{
if(!st[v[n][i]])
{
dfs(v[n][i], u - 1);
}
}
}
int main()
{
cin >> n >> m;
for(int i = 1; i <= m; i ++ )
{
int x, y;
cin >> x >> y;
v[x].push_back(y);
}
for(int i = 1; i <= n; i ++ ) sort(v[i].begin(), v[i].end());
dfs(1, n);
puts("");
bfs();
}