Cod sursa(job #1293778)

Utilizator pincucatalinPincu Catalin pincucatalin Data 16 decembrie 2014 15:57:34
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <cstdio>

using namespace std;
FILE *in=fopen ("bfs.in","r");
FILE *out=fopen ("bfs.out","w");
int n,m,lst[1000001],vf[1000001],urm[1000001],d[1000001],q[1000001],x0;
void adauga (int x,int y)
{
    vf[++m]=y;
    urm[m]=lst[x];
    lst[x]=m;
}
void init ()
{
    for (int i=1; i<=n; i++)
        d[i]=-1;
}
void bfs (int x)
{
    int p=1,u=0,poz,y;
    d[x]=0;
    q[++u] = x;
    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 afisare ()
{
    for (int i=1; i<=n; i++)
        fprintf (out,"%d ",d[i]);
}
void citire ()
{
    int a;
    fscanf (in,"%d%d%d",&n,&a,&x0);
    for (int i=0; i<a; i++)
    {
        int x,y;
        fscanf (in,"%d%d",&x,&y);
        adauga(x,y);
    }
    init();
    bfs (x0);
    afisare ();
}
int main()
{
    citire();
    return 0;
}