Cod sursa(job #1295358)

Utilizator cldmeClaudiu Ion cldme Data 19 decembrie 2014 12:21:45
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <stdio.h>
int const N=1000001;
int const M=100001;
int vf[N],urm[N],lst[N],nr;
int cost[M],q[M],viz[M];

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

void bfs(int p)
{
    int prm=1,ult=1,poz,y;
    cost[p] = 0;
    viz[p] = true;
    q[1] = p;
    while(prm<=ult)
    {
        p = q[prm++];
        poz = lst[p];
        while(poz!=0)
        {
            y = vf[poz];
            if(cost[y] == 0 && !viz[y])
            {
                cost[y] = 1 + cost[p];
                viz[y] = true;
                q[++ult] = y;
            }
            poz = urm[poz];
        }
    }
}

int main()
{
    int i,n,m,s,x,y;
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    scanf("%d %d %d",&n,&m,&s);
    for(i=1;i<=m;i++)
    {
        scanf("%d %d",&x,&y);
        addEdge(x,y);
    }
    bfs(s);
    for(i=1;i<=n;i++)
    {
        if(cost[i] == 0 && i!=s) printf("-1 ");
        else printf("%d ",cost[i]);
    }
    return 0;
}