Cod sursa(job #2036197)

Utilizator mihai.alphamihai craciun mihai.alpha Data 10 octombrie 2017 14:43:29
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>

FILE *fin, *fout;

#define MAXN (int)1e5

std::vector <int> v[MAXN + 1];
std::queue <int> q;


#define inf 0x3f3f3f3f
#define INF 1061109567

int N, M, S;
int cost[MAXN + 1];

int main()  {
    fin = fopen("bfs.in", "r");
    fout = fopen("bfs.out", "w");
    fscanf(fin, "%d%d%d", &N, &M, &S);
    for(int i = 1;i <= M;i++)  {
        int x, y;
        fscanf(fin, "%d%d", &x, &y);
        v[x].push_back(y);
    }
    memset(cost, inf, sizeof cost);
    q.push(S);
    cost[S] = 0;
    while(q.size())  {
        int nod = q.front();
        q.pop();
        for(auto x : v[nod])  {
            if(cost[x] > cost[nod] + 1)  {
                cost[x] = cost[nod] + 1;
                q.push(x);
            }
        }
    }
    for(int i = 1;i <= N;i++)  {
        if(cost[i] >= INF)
            fprintf(fout, "-1 ");
        else
            fprintf(fout, "%d ", cost[i]);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}