//这里,样例可以过,自己写了很多图也是可以过的,但是交上去就是全WA,实在是找不到bug了,求助
```
#include<bits/stdc++.h>
using namespace std;
vector<int> q[100002];
bool ask[100002][2];
void dfs(int x){
// if(q[x].size()==0) return ;
//如果没有后继,那么返回
//接下来开始从下继们一个个枚举
ask[x][0]=1;
cout<<x<<' ';
//如果这个值还没有输出过的话就输出一次并且标记
//如果这个值输出果,那么就不需要再次搜索了
for(int i=0;i<q[x].size();i++)
if(!ask[q[x][i]][0])
dfs(q[x][i]);
//如果x的下属xi并没有被搜索过,那么搜索这个点
return ;
}
queue<int> Q;
int main(){
int m,n;
cin>>n>>m;
//n是结点数,m是边数
for(int i=1;i<=m;i++){
int a,b;
cin>>a>>b;
q[a].push_back(b);
//将a的一个下属b压入编号为a的不定数组q[a]
}
//现在已经将所有边的关系记录下来了,接下来是遍历
dfs(1);
//将访问记录数组归零,广搜还需要用
cout<<endl;
Q.push(1);
int head;
while(!Q.empty()){
head=Q.front();
Q.pop();
ask[head][1]=1;
cout<<head<<' ';
//将取出的队首输出
//取出了队首,并且将队首的所有 未搜索下属 全部压入队列
for(int i=0;i<q[head].size();i++){
if(ask[q[head][i]][1]==0){
//如果下属中这一项没有被搜索过
ask[q[head][i]][1]=1;
Q.push(q[head][i]);
//将这一项记录为搜索过并且压入队列等待广搜
}
}
}
return 0;
}
```