Cod sursa(job #632718)

Utilizator gherghe94Andrei Gherghelau gherghe94 Data 12 noiembrie 2011 10:02:08
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <cstdio>

using namespace std;
int n,m,s;
struct nod
{
    int x;
    nod *urm;
}*l[100002];
void add_begin(int x,nod *&p)
{
    nod *q=new nod;
    q->x=x;
    q->urm=p;
    p=q;
}
int coada[100002];
int viz[100002];
void bfs()
{
    int start=1;
    int final=1;
    coada[final++]=s;
    viz[s]=1;
    for(int i=start;i<=final;++i)
    {
        for(nod *j=l[coada[i]];j;j=j->urm)
        {
            if(!viz[j->x])
            {
                coada[final++]=j->x;
                viz[j->x]=1+viz[coada[i]];
            }
        }
        start++;
    }
}
void afisare()
{
    for(int i=1;i<=n;i++)
    {
        printf("%d ",viz[i]-1);
    }
}
void citire()
{
    freopen("bfs.in","r",stdin);
    scanf("%d %d %d",&n,&m,&s);
    for(int i=0;i<m;i++)
    {
        int x,y;
        scanf("%d %d",&x,&y);
        add_begin(y,l[x]);
    }
}
int main()
{
    freopen("bfs.out","w",stdout);
    citire();
    bfs();
    afisare();
    return 0;
}