我的代码
#include<bits/stdc++.h>
using namespace std;
vector<int> v[1000000];
vector<int> v1[1000000];
queue<int> q;
bool s[1000000];
void a(int x){
printf("%d ",x);
for(int i=0;i<v[x].size();i++){
if(!s[v[x][i]]){
s[v[x][i]]=1;
a(v[x][i]);
}
}
}
void b(){
while(!q.empty()){
int x=q.front();
q.pop();
cout<<x<<" ";
for(int i=0;i<v1[x].size();i++)
if(!s[v1[x][i]]){
s[v1[x][i]]=1;
q.push(v1[x][i]);
}
}
}
int main(){
long long n,m;
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
v[x].push_back(y);
v1[x].push_back(y);
}
s[0]=1;
a(1);
//
cout<<endl;
//
q.push(1);
b();
return 0;
}
输入
8 9
1 2
1 3
1 4
2 5
2 6
3 7
4 7
4 8
7 8
我的输出
1 2 5 6 3 7 8 4
1
把函数a注释掉后,bfs(b函数)可以正常输出结果 注释函数a
#include<bits/stdc++.h>
using namespace std;
vector<int> v[1000000];
vector<int> v1[1000000];
queue<int> q;
bool s[1000000];
void a(int x){
printf("%d ",x);
for(int i=0;i<v[x].size();i++){
if(!s[v[x][i]]){
s[v[x][i]]=1;
a(v[x][i]);
}
}
}
void b(){
while(!q.empty()){
int x=q.front();
q.pop();
cout<<x<<" ";
for(int i=0;i<v1[x].size();i++)
if(!s[v1[x][i]]){
s[v1[x][i]]=1;
q.push(v1[x][i]);
}
}
}
int main(){
long long n,m;
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
v[x].push_back(y);
v1[x].push_back(y);
}
s[0]=1;
// a(1);
//
cout<<endl;
//
q.push(1);
b();
return 0;
}
输出
1 2 3 4 5 6 7 8
这是为什么??? 求解!