Cod sursa(job #2379505)

Utilizator stefanpiturStefan Alexandru Pitur stefanpitur Data 13 martie 2019 19:08:23
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

const int MAX_NODURI = 100001;
bool vizitat[MAX_NODURI];
int lungime[MAX_NODURI];
vector <int> G[MAX_NODURI];
queue <int> Q;

void bfs(int nod){
    Q.push(nod);
    vizitat[nod]=true;
    while(!Q.empty()){
        nod=Q.front();
        for(int i=0;i<G[nod].size();i++)
            if(vizitat[G[nod][i]]==false){
                lungime[G[nod][i]]=lungime[nod]+1;
                vizitat[G[nod][i]]=true;
                Q.push(G[nod][i]);
            }
        Q.pop();
    }
}

int main()
{
    FILE *fin, *fout;
    int n,m,s,i,x,y;
    fin=fopen("bfs.in","r");
    fout=fopen("bfs.out","w");
    fscanf(fin,"%d %d %d",&n,&m,&s);
    for(i=1;i<=m;i++){
        fscanf(fin,"%d %d\n",&x,&y);
        G[x].push_back(y);
    }
    bfs(s);
    for(i=1;i<=n;i++)
        if(lungime[i]==0 && i!=s)
            fprintf(fout,"-1 ");
        else
            fprintf(fout,"%d ",lungime[i]);
    fclose(fin);
    fclose(fout);
    return 0;
}