Cod sursa(job #604747)

Utilizator octavianOctavian Crintea octavian Data 24 iulie 2011 20:49:28
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<cstdio>
#include<vector>
using namespace std;

FILE *fin, *fout;

#define MAXN 100001

vector <int> a[MAXN];//listele de adiacenta
int d[MAXN], nvec[MAXN], q[MAXN];//numarul de arce, numarul de vecini, coada

int main()
{
    int n, m, s, i, x, y, cap, coada, nod;

    fin = fopen ("bfs.in", "r");
    fout = fopen ("bfs.out", "w");

    fscanf (fin, "%d %d %d", &n, &m, &s);

    for (i = 1; i <=n; i++)
    {
        d[i] = -1;
        nvec[i] = 0;
    }

    for (i = 1; i <= m; i++)
    {
        fscanf (fin, "%d %d", &x, &y);

        nvec[x]++;
        a[x].push_back(y);
    }

    q[1] = s; cap = coada = 1;
    d[s] = 0;

    while (cap <= coada)
    {
        nod = q[cap];

        for (i = 0; i < nvec[nod]; i++)
            if(d[a[nod][i]] == -1)
            {
                q[++coada] = a[nod][i];

                d[a[nod][i]] = d[nod] + 1;
            }

        cap++;
    }

    for (i = 1; i <= n; i++)
        fprintf (fout, "%d ", d[i]);

    fclose (fin); fclose (fout);

    return 0;
}