Cod sursa(job #1434721)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 11 mai 2015 10:55:47
Problema BFS - Parcurgere in latime Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <cstdio>
#include <cstring>
#include <vector>
#define DIM 100010
using namespace std;

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

int N, M, S, X, Y, F[DIM], Cd[2][DIM], Cost[DIM];
vector <int> V[DIM];

void SetUp(){
    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);
    }   memset(Cost, -1, sizeof(Cost));
    return;
}

void BFS(){
    int p = 1, u = 1, K = 1;
    Cd[1][K] = S;
    Cd[2][K] = 0;
    F[S] = 1;
    Cost[S] = 0;
    for(p = 1; p <= u; p ++){
        for(int i = 0; i < V[Cd[1][p]].size(); i ++)
            if(F[V[Cd[1][p]][i]] == 0){
                F[V[Cd[1][p]][i]] = 1;
                u ++;
                Cd[1][u] = V[Cd[1][p]][i];
                Cd[2][u] = Cd[2][p] + 1;
                Cost[Cd[1][u]] = Cd[2][u];
            }
    }
    return;
}

void Finish(){
    for(int i = 1; i <= N; i ++)
        fprintf(fout, "%d ", Cost[i]);
    return;
}

int main(){
    SetUp();
    BFS();
    Finish();
    return 0;
}