Cod sursa(job #1627612)

Utilizator andrei_bB. Andrei andrei_b Data 3 martie 2016 18:02:24
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>

using namespace std;

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

const int Nmax=100005;
const int Mmax=400005;

int n,m,a,b,c,nr,vf[Mmax],lst[Nmax],urm[Mmax],q[Nmax],d[Nmax];

void adauga ( int x , int y ){
    nr++;
    vf[nr]=y;
    urm[nr]=lst[x];
    lst[x]=nr;
}

void bfs ( int x ){

    int p,u,poz,y;

    for ( int i=1 ; i<=n ; i++ )
        d[i]=-1;

    p=u=0;
    q[u++]=x;
    d[x]=0;

    while ( p < u ){
        x=q[p++];
        poz=lst[x];
        while ( poz != 0 ){
            y=vf[poz];
            poz=urm[poz];
            if ( d[y] == -1 ) {
                d[y]=1+d[x];
                q[u++]=y;
            }
        }
    }
}

int main()
{
    fin>>n>>m>>c;
    for ( int i=1 ; i<=m ; i++ ){
        fin>>a>>b;
        adauga(a,b);
    }

    bfs(c);

    for ( int i=1 ; i<=n ; i++ )
        fout<<d[i]<<' ';

}