题目来源:【深基18.例3】查找文献 - 洛谷
#include <bits/stdc++.h>
using namespace std;
int nv,ne;
vector<int> v[100010];
int flag_dfs=0;
int visited_dfs[100010];
void dfs(int root){
visited_dfs[root]=1;
printf("%s%d",flag_dfs==0?"":" ",root);
flag_dfs=1;
for(int i=0;i<v[root].size();i++){
if(visited_dfs[v[root][i]]!=1) dfs(v[root][i]);
}
}
int flag_bfs=0;
int visited_bfs[100010];
void bfs(){
queue<int> q;
q.push(1);
visited_bfs[1]=1;
while (!q.empty()){
int tmp=q.front();
q.pop();
printf("%s%d",flag_bfs==0?"":" ",tmp);
flag_bfs=1;
for(int i=0;i<v[tmp].size();i++)
if(visited_bfs[v[tmp][i]]!=1){
q.push(v[tmp][i]);//访问候补队列
visited_bfs[v[tmp][i]]=1;//这步位置很重要,防止重复访问
}
}
}
int main(){
scanf("%d %d",&nv,&ne);
int t1,t2;
for(int i=0;i<ne;i++){
scanf("%d %d",&t1,&t2);
v[t1].push_back(t2);
sort(v[t1].begin(),v[t1].end());
}
dfs(1);
printf("\n");
bfs();
return 0;
}