Cod sursa(job #399085)

Utilizator robertzelXXX XXX robertzel Data 19 februarie 2010 20:21:47
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 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;
int cost[maxn];
vector<int> gr[maxn];
queue<int> coada;

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

    cin >> n >> m >> s;

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

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

    //Se adauga primul nod in coada
    //Se seteaza costul 0 pt acel nod
    coada.push(s);
    cost[s] = 0;

    while (!coada.empty()) {
        //Se scoate din coada
        nod = coada.front();
        //Se sterge elementul din coada
        coada.pop();

        for (i=0; i<gr[nod].size(); i++) {
            if (cost[gr[nod][i]] == -1) {
                coada.push(gr[nod][i]);
                cost[gr[nod][i]] = cost[nod] + 1;
            }
        }
    }

    //Afiseaza rezultatul
    for (i=1;i<=n;i++) {
        cout << cost[i] << " ";
    }

    return 0;
}