Cod sursa(job #1401055)

Utilizator Tudordmdaniel marin Tudordm Data 25 martie 2015 17:11:07
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<cstdio>

using namespace std;

int viz[100001],nr,lst[100001],urm[2000001],vf[2000001],d[100001],q[100001],n,m,s;

void adauga (int x,int y)
{


    ++nr;
    vf[nr]=x;
    urm[nr]=lst[y];
    lst[y]=nr;

}

void bfs(int x0)
{

    int p=0,u=-1;
    int x,y,poz;
    q[++u]=x0;
    d[x0]=0;
    while(p<=u)
    {

        x=q[p++];
        poz=lst[x];
        while(poz!=0)
        {

            y=vf[poz];
            if(d[y]==-1)
            {

                d[y]=1+d[x];
                q[++u]=y;

            }

            poz=urm[poz];

        }
    }
}

void init()
{

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

}

int main(){

    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);

    int x,y;

    scanf("%d%d%d",&n,&m,&s);

    init();

    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&x,&y);
        adauga(y,x);

    }

    bfs(s);

    for(int i=1 ; i<=n ; i++ )  printf("%d ",d[i]);

    return 0;

}