Cod sursa(job #1594120)

Utilizator casuneanu.andreiCasuneanu Andrei Dan casuneanu.andrei Data 9 februarie 2016 10:57:00
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <vector>
#include <queue>
#define IN "bfs.in"
#define OUT "bfs.out"
#define pb push_back
#define DMAX 100008
using namespace std;
ifstream fin(IN);
ofstream fout(OUT);

vector <int> a[DMAX];
int n, m, s;
int dist[DMAX];


void read();
void solve();
void show();

int main(){
    read();
    solve();
    show();
    return 0;
}

void show(){
    int i;
    for (i = 1; i <= n; ++i)
        fout <<dist[i] - 1<<' ';
    fout <<'\n';
    fout.close();
}

void solve(){
    queue <int> c;
    c.push(s);
    dist[s] = 1;

    int node, i, dim;
    while (!c.empty()){
        node = c.front();
        c.pop();
        //showtime
        dim = a[node].size();
        for (i = 0; i < dim; ++i)
            if (!dist[ a[node][i] ]){
                c.push(a[node][i]);
                dist[ a[node][i] ] = dist[node] + 1;
            }
    }
}

void read(){
    fin >>n>>m>>s;

    int i, x, y;
    for (i = 0; i < m; ++i){
        fin >>x>>y;
        a[x].pb(y);
    }
}