Cod sursa(job #2021350)

Utilizator StefanManolacheManolache Stefan StefanManolache Data 13 septembrie 2017 12:46:25
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>
#include <vector>

FILE *fin = fopen("bfs.in", "r");
FILE *fout = fopen("bfs.out", "w");

#define maxn 100000





std::vector<int> v[maxn + 1];

bool viz[maxn + 1];
int q[maxn + 1];
int st = 0;
int dr = 0;
int dist[maxn + 1];


inline void add (int t) {
    q[dr] = t;
    dr++;
    viz[t] = 1;
}
inline void del () {
    st++;
}


int main()
{

    int n, m, s, x, y, rez = 0;

    fscanf(fin, "%d%d%d", &n, &m, &s);

    for (int i = 1; i <= m; i++) {
        fscanf(fin, "%d%d", &x, &y);
        v[x].push_back (y);
    }
    add(s);
    while(st <= dr) {
        for (auto y : v[q[st]]) {
            if (viz[y] != 1) {
                add(y);
                dist[y] = dist[q[st]] + 1;
            }

        }
        del();
    }
    for (int i = 1; i <= n; i++) {
        if (dist[i] != 0 && i != s)
            fprintf(fin, "%d", dist[i]);
        else if (i == s)
            fprintf(fin, "0");
        else
            fprintf(fin, "-1");
        fprintf(fin, " ");
    }
    return 0;
}