Cod sursa(job #541085)

Utilizator DanceKrissCristian Oancea DanceKriss Data 24 februarie 2011 20:11:43
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include<stdio.h>

using namespace std;

const int LUNG = 100005;
int viz[LUNG], cat[LUNG], c[LUNG],
    n,m,start;
typedef struct nod
    {
        int inf;
        nod *adr;
    } TNOD;
TNOD *v[LUNG],*p;

void add( int a, int b )
{
    p= new TNOD;
    p->inf=a;
    p->adr=v[b];
    v[b]=p;
}

void citire()
{
    int i,x,y;
    cin>>n>>m>>start;

    for( i=1; i<=m; i++ )
        {
            cin>>x>>y;
            add(y,x);
        }
}

void bfs()
{
    int li,ls,x,size=0;
    li=ls=0;
    cat[start] = 0;
    c[li++] = start;
    viz[start] = 1;

    while( ls<=li )
        {
            x=c[ls];
            size++;
            for ( TNOD *p=v[x]; p!=0; p=p->adr )
                if( !viz[p->inf] && v[p->inf] )
                    cat[p->inf] = size,
                    c[li++] = p->inf,
                    viz[p->inf] = 1;
            ls++;
        }

    for(int i=1; i<=n; i++ )
        if(!viz[i]) printf("-1 ");
            else printf("%d ",cat[i]);

    printf("\n");
}

int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    fitire();
    bfs();
    fclose(stdin);
    fclose(stdout);
    return 0;
}