Cod sursa(job #854273)

Utilizator ioanapopaPopa Ioana ioanapopa Data 13 ianuarie 2013 02:43:51
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<cstdio>
using namespace std;

int N, M, S;
int q[100001], use[100001], Cost[100001];

struct lista {
    int nod;
    lista *urm;
    } *G[100001];

void add(int i, int j)
{
    lista *p;
    p = new lista;

    p->nod = j;
    p->urm = G[i];

    G[i] = p;
}

void inPut()
{
    freopen ( "bfs.in", "r", stdin );

    scanf ( "%d %d %d", &N, &M, &S );

    int i, j;

    for(; M; M--)
    {
        scanf ( "%d %d", &i, &j );
        add ( i, j );
    }
}

void breadth(int kr)
{
    int st, dr;
    lista *p;
    q[1] = kr;
    use[kr] = 1;

    st = dr = 1;

    for(; st<=dr; st++)
    {
        p = G[ q[st] ];

        for(; p!=NULL; p=p->urm)
            if ( !use[p->nod] )
            {
                Cost[p->nod] = Cost[ q[st] ] + 1;
                use[p->nod] = 1;
                q[++dr] = p->nod;
            }
    }
}

int main()
{
    inPut();
    breadth(S);

    freopen ( "bfs.out", "w", stdout );

    for(int i=1; i<=N; i++)
        if ( Cost[i] )
            printf ( "%d ", Cost[i] );
        else if ( !(i-S) )
            printf ( "0 " );
        else
            printf ( "-1 " );

    fclose(stdout);

    return 0;
}