Cod sursa(job #1388881)

Utilizator AlexandraaaaMereu Alexandra Alexandraaaa Data 15 martie 2015 19:44:38
Problema BFS - Parcurgere in latime Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define max 100005
using namespace std;

vector <int> G[max];
void bf(int v, int s, int nr[]) {
    int i, j, grad[max];
    for (i = 1; i <= v; i++) {
        grad[i] = G[i].size();
    }
    queue <int> Coada;
    nr[s]++;
    for (i = 0; i < grad[s]; i++)
        if (nr[G[s][i]] == -1) {
            Coada.push(G[s][i]);
            nr[G[s][i]] = 1;
        }
    while (!Coada.empty()) {
        j = Coada.front();
        Coada.pop();
        for (i = 0; i < grad[j]; i++)
            if (nr[G[j][i]] == -1) {
                Coada.push(G[j][i]);
                nr[G[j][i]] = nr[j] +
                    1;
            }
    }
}

int main()
{
    int i, v, e, x, y, s, nr[max];
    ifstream f("bfs.in");
    ofstream g("bfs.out");
    f >> v >> e >> s;
    for (i = 1; i <= e; i++) {
        f >> x >> y;
        G[x].push_back(y);
        nr[i] = -1;
    }
    bf(v, s, nr);
    for (i = 1; i <= v; i++)
        g << nr[i] << " ";
    f.close();
    g.close();
    return 0;
}