Cod sursa(job #2661264)

Utilizator FasoleboiTudor Gadalean Fasoleboi Data 21 octombrie 2020 17:35:53
Problema BFS - Parcurgere in latime Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>
#define NMAX 50005
#define inf (1 << 30)
using namespace std;

ifstream fin("bfs.in");
ofstream fout("bfs.out");

int n, m, s, d[NMAX];
bool viz[NMAX];

vector < int > v[NMAX];
queue < int > q;

void read(){
    fin>>n>>m>>s;

    for(int i=1;i<=m;i++){
        int x, y;
        fin>>x>>y;
        v[x].push_back(y);
    }

    for(int i=1;i<=n;i++){
        d[i] = inf;
    }
    d[s] = 0;
}

void bfs(int nod){

    q.push(nod);
    viz[nod] = 1;

    while(!q.empty()){
        nod = q.front();
        q.pop();
        viz[nod] = 0;

        for(unsigned int i=0;i<v[nod].size();i++){
            int vecin = v[nod][i];
            if(d[nod] + 1 < d[vecin]){
                d[vecin] = d[nod] + 1;
                if(!viz[vecin]){
                    viz[vecin] = 1;
                    q.push(vecin);
                }
            }
        }
    }
}

void post(){
    for(int i=1;i<=n;i++){
        if(d[i]==inf){
            d[i] = -1;
        }
        fout<<d[i]<<" ";
    }
}

int main(){
    read();
    bfs(s);
    post();
    return 0;
}