Cod sursa(job #700311)

Utilizator wamfeverDobos Ionut wamfever Data 1 martie 2012 09:23:19
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include<fstream>
#include<algorithm>
using namespace std;

ifstream f("bfs.in");
ofstream g("bfs.out");

int n, m, S, Cost[100001], q[100001];
char U[100001];

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

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

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

void citire()
{
    f >> n >> m >> S;
    int x, y;

    while(m--)
    {
        f >> x >> y;
        adauga(x, y);
    }
}

void BF(int vf)
{
    int st, dr;
    lista *p;
    q[1] = vf;
    U[vf] = 1;
    st = dr = 1;
    for(; st<=dr; st++)
    {
        p = G[ q[st] ];
        while(p)
        {
            if(!U[p->nod])
            {
                Cost[p->nod] = Cost[ q[st] ] + 1;
                U[p->nod] = 1;
                q[++dr] = p->nod;
            }

            p = p->urm;
        }
    }
}

int main()
{
    citire();
    BF(S);

    for(int i=1; i<=n; i++)
        if( Cost[i] ) g << Cost[i] << " ";
        else if ( i == S ) g << "0 ";
        else g << "-1 ";
    g << "\n";
    return 0;
}