Cod sursa(job #1324491)

Utilizator StexanIarca Stefan Stexan Data 22 ianuarie 2015 13:49:26
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
//
//  main.cpp
//  Playground
//
//  Created by Stefan Iarca on 1/22/15.
//  Copyright (c) 2015 Stefan Iarca. All rights reserved.
//

#include <fstream>
#include <queue>
#include <vector>
using namespace std;

#define NMAX 100005

ifstream f("dfs.in");
ofstream g("dfs.out");

int N,M,Source;
int Value[NMAX];
vector<int> G[NMAX];
queue<int> Q;

void Init(){
    for (int i = 0; i <= NMAX; i++) {
        Value[i] = -1;
    }
}

void Read(){
    f>>N>>M>>Source;
    for (int i = 0; i < M; i++) {
        int x,y;
        f>>x>>y;
        G[x].push_back(y);
    }
}

void BFS(){
    Q.push(Source); Value[Source] = 0;
    
    while (!Q.empty()) {
        int Element = Q.front(); Q.pop();
        for (vector<int>::iterator it = G[Element].begin(); it != G[Element].end(); it++) {
            if (Value[*it] == -1) {
                Value[*it] = Value[Element] + 1;
                Q.push(*it);
            }
        }
    }
    
}

void Solve(){
    BFS();
}

void Write(){
    for (int i = 1; i <= N; i++) {
        g<<Value[i]<<" ";
        
    }
}

int main() {
    
    Init();
    Read();
    Solve();
    Write();
    
    return 0;
}