20分,RE掉四个
#include<bits/stdc++.h>
using namespace std;
int num,head[1000005];
bool f[1000005];
struct int_que
{
int ver_q;
int next_q;
};
int_que q[1000005];
int bfs_que[1000005],tail=1,bfs_num=0;
void dfs(int);
void bfs(int);
void add(int from,int to)
{
num++;
q[num].ver_q=to;
q[num].next_q=head[from];
head[from]=num;
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int from,to;
cin>>from>>to;
add(from,to);
}
dfs(1);
cout<<endl;
memset(f,0,sizeof(f));
bfs(1);
while(bfs_num<tail-1)
bfs(bfs_que[bfs_num]);
return 0;
}
void dfs(int now)
{
if(f[now]==1)
return;
if(now==0)
return;
cout<<now<<" ";
f[now]=1;
int s=head[now],i,a[1000005];
for(i=1;i;i++)
{
a[i]=q[s].ver_q;
if(!q[s].next_q)
break;
s=q[s].next_q;
}
sort(a+1,a+1+i);
for(int k=1;k<=i;k++)
dfs(a[k]);
return;
}
void bfs(int now)
{
//cout<<now;
bfs_num++;
if(f[now]==1)
return;
if(now==0)
return;
f[now]=1;
cout<<now<<" ";
int s=head[now],record=tail;
for( ; ;tail++)
{
bfs_que[tail]=q[s].ver_q;
if(!q[s].next_q)
{
tail++;
break;
}
s=q[s].next_q;
}
sort(bfs_que+record,bfs_que+tail);
return;
}