Cod sursa(job #360819)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 2 noiembrie 2009 10:09:08
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<vector>
#include<stdio.h>

using namespace std;
int n,m,s,a,b,x[100001],viz[100001],d[100001],nrr,nr[100001];

vector <long> v[100001];
int main ()
{
    int i,sf,in;
    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",&a,&b);
        if(a!=b)
            v[a].push_back(b);
    }
    x[1]=s;
    in=1;sf=1;
    viz[s]=1;
    for(i=1;i<=n;i++)
       nr[i]=v[i].size();

    
    while(sf>=in)
    {
     nrr=nr[x[in]];
        for(i=0;i<nrr;i++)
            if(viz[v[x[in]][i]]==0)
            {
                x[++sf]=v[x[in]][i];
                viz[v[x[in]][i]]=1;
                d[v[x[in]][i]]=d[x[in]]+1;
            }
        in++;
    }
    for(i=1;i<=n;i++)
        if(d[i]==0 && i!=s)
            printf("-1 ");
        else
           printf("%d ",d[i]);
    printf("\n");
    return 0;
}