求助!!!!!
查看原帖
求助!!!!!
462160
lyz1466楼主2022/3/26 22:47

P5318

我的代码

#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 

这是为什么??? 求解!

2022/3/26 22:47
加载中...