Cod sursa(job #399091)

Utilizator robertzelXXX XXX robertzel Data 19 februarie 2010 20:31:18
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 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);

    cin >> n >> m >> s;

    //Citesc arcele
    for (i=1; i<=m; i++) {
        cin >> x >> y;
        gr[x].push_back(y);
    }

    //Se seteaza toate nodurile nevizitate
    fill(cost, cost+maxn, -1);

    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++) {
        cout << cost[i] << " ";
    }

    return 0;
}