Cod sursa(job #399097)

Utilizator robertzelXXX XXX robertzel Data 19 februarie 2010 20:36:45
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <vector>
#include <queue>
#define maxn 100010

using namespace std;

//n - noduri
//m - arce
int n,m,s,i,x,y,nod,l,j;
int cost[maxn],g[maxn],coada[maxn];
vector<int> gr[maxn];

int main()
{
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);

    scanf("%d %d %d", &n, &m, &s);

    //Citesc arcele
    for (i=1; i<=m; i++) {
        scanf("%d %d", &x, &y);
        gr[x].push_back(y);
    }

    //Se seteaza toate nodurile nevizitate
    memset(cost, -1, sizeof(cost));

    for (i=1; i<=n; i++) {
        g[i] = gr[i].size();
    }

    //Se adauga primul nod in coada
    //Se seteaza costul 0 pt acel nod
    l=1;
    coada[l] = s;
    cost[s] = 0;

    for (i=1; i<=l; i++) {
        //Se scoate din coada
        nod = coada[i];

        for (j=0; j<g[nod]; j++) {
            if (cost[gr[nod][j]] == -1) {
                coada[++l] = gr[nod][j];
                cost[gr[nod][j]] = cost[nod] + 1;
            }
        }
    }

    //Afiseaza rezultatul
    for (i=1;i<=n;i++) {
        printf("%d ", cost[i]);
    }

    return 0;
}