求助
查看原帖
求助
770428
EZ14楼主2023/5/1 17:21

BFS错在哪里了呢?

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;

struct node{
    int s, e;
}g[1000005];
int v[1000005], mark[1000005], n, m;

bool cmpfunc(node x, node y){
    if(x.s == y.s){
        return x.e < y.e;
    }
    return x.s < y.s;
}

void dfs(int x){
    v[x] = 1;
    cout << x << ' ';
    int i = mark[x];
    while((g[i].s == x) && (i < m)){
        if(v[g[i].e] == 0){
            dfs(g[i].e);
        }
        i++;
    }
}

queue<int>q;

void bfs(){
    queue<int>q;
    q.push(g[0].s);
    cout << g[0].s << " ";
    while(!q.empty()){
        int x = q.front();
        int i = mark[x];
        while((i<m) && (g[i].s == x)){
            if(v[g[i].e] == 0){
                q.push(g[i].e);
                cout << g[i].e << " ";
                v[g[i].e] = 1;
            }
            i++;
        }
        q.pop();
    }
    cout << endl;
}

int main(){
    cin >> n >> m;
    memset(mark, -1, sizeof(mark));
    memset(v, 0, sizeof(v));
    for(int i = 0; i < m; i++){
        cin >> g[i].s >> g[i].e;
    }
    sort(g, g+m, cmpfunc);
    int t = 0;
    for(int i = 0; i < m; i++){
        if(t != g[i].s){
            t = g[i].s;
            mark[t] = i;
        }
    }
    dfs(1);
    cout << endl;
    memset(v, 0, sizeof(v));
    bfs();
}
2023/5/1 17:21
加载中...