Cod sursa(job #645113)

Utilizator 1994Barbulescu Daniel 1994 Data 8 decembrie 2011 16:01:31
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <cstdio>
#include <stdlib.h>
//#include <alloc>
#define N 100005
using namespace std;

struct nod{
    int x;
    nod *urm;
}*a[N];

int viz[N],c[N],u,dist[N],n,m,k;

void add(int y,int z)
{
    nod *l;
    l=new nod;
    l->x=z;
    l->urm=a[y];
    a[y]=l;
    /*for (nod *i=l;i;i=i->urm)
        if (i==NULL)
        {
            i=new nod;
            i->x=z;
        }*/

}

void read()
{
    int y,z;
    scanf("%d %d %d",&n,&m,&k);
    for (int i=1;i<=m;i++)
    {
        scanf("%d %d",&y,&z);
        add(y,z);
    }

}

void bfs(int v)
{
    viz[v]=1;
    c[0]=v;
    u=1;
    for (int p=0;p<u;p++)
    {
        for (nod *i=a[c[p]];i;i=i->urm)
        {
            if (viz[i->x]==0)
            {
                c[u]=i->x;
                viz[c[u]]=1;
                dist[c[u]]=dist[c[p]]+1;
                u++;
            }
        }
    }

}

int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    read();
    bfs(k);
    for (int i=1;i<=n;i++)
        if (viz[i]==0)
            printf("-1 ");
        else
            printf("%d ",dist[i]);
    return 0;
}