Cod sursa(job #1571356)

Utilizator Vali_DeaconuVali Deaconu Vali_Deaconu Data 17 ianuarie 2016 23:44:58
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include<cstdio>
#include<vector>
#include<algorithm>

using namespace std;

#define MAX_N   100010

vector<int> L[MAX_N];
vector<int>::iterator it;

int v[MAX_N];
int S[MAX_N];
int c[MAX_N];

int n, m, g, i, x, y, p, u;
int curent, vecin;

int main () {
    if (freopen("bfs.in", "rt", stdin));
    if (scanf("%d %d %d", &n, &m, &g));
    for (i=1;i<=m;i++) {
        if (scanf("%d %d", &x, &y));
        L[x].push_back(y);
    }
    fclose(stdin);

    for (i=1; i<=n; i++)
        sort(L[i].begin(), L[i].end());

    c[1] = g;
    v[g] = 1;
    S[1] = 1;

    p = u = 1;
    while (p<=u) {
        curent = c[p];
        for (it = L[curent].begin(); it != L[curent].end(); it++) {
            vecin = *it;
            if (v[vecin] == 0) {
                u++;
                c[u] = vecin;
                v[vecin] = 1;
                S[vecin] = 1 + S[curent];
            }
        }
        p++;
    }

    if (freopen("bfs.out", "wt", stdout));
    for (i=1; i<=n; ++i)
        printf("%d ", ((v[i] > 0) ? (S[i]) : (-1)));
    fclose(stdout);
    return 0;
}