RT
题目要求输出** 1 2 3 4** ,可我输出 1 4 3 2 ,如何改变这个顺序???
代码
#include<memory.h>
#include<iostream>
using namespace std;
const int N=100001,M=50000010;
struct edgenode{int num,next;};
edgenode e[M];
int a[N],n,m,k=0;
bool flag[N]={false};
int q[N],h,t;
void ins(int x,int y)
{
k++;
e[k].num=y;
e[k].next=a[x];
a[x]=k;
}
void bfs(int x)
{
memset(flag,false,sizeof(flag));
h=0; t=1; q[t]=x;flag[x]=true;
while (h<t)
{
int y=q[++h];
cout<<y<<' ';
for(int k=a[y]/*改顺序应该在这*/; k!=-1; k=e[k].next)
if(!flag[e[k].num])
{
q[++t]=e[k].num;
flag[e[k].num]=true;
}
}//问题就出在这里
}
void dfs(int x)
{
cout<<x<<' '; flag[x]=true;
for(int k=a[x];k!=-1;k=e[k].next)
if(!flag[e[k].num])dfs(e[k].num);
}//问题就出在这里
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)a[i]=-1;
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
ins(x,y);
}
dfs(1);
cout<<endl;
bfs(1);
cout<<endl;
return 0;
}
题目:P5318