Cod sursa(job #1299970)

Utilizator somuBanil Ardej somu Data 23 decembrie 2014 23:05:34
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <queue>
#define nmax 100005
#define inf (1<<30)
using namespace std;

ifstream fin("bfs.in");
ofstream fout("bfs.out");

int n, m, s;
int cost[nmax];
vector <int> V[nmax];
queue < pair<int, int> > Q;

void readData() {
    int i, x, y;
    fin >> n >> m >> s;
    for (i = 1; i <= n; i++)
        cost[i] = inf;
    for (i = 1; i <= m; i++) {
        fin >> x >> y;
        V[x].push_back(y);
    }
}

void bfs() {
    int i;
    cost[s] = 0;
    Q.push(make_pair(s, 0));
    while (!Q.empty()) {
        int nod = Q.front().first;
        int Cost = Q.front().second;
        Q.pop();
        for (i = 0; i < V[nod].size(); i++) {
            int vecinCurent = V[nod][i];
            if (cost[vecinCurent] > Cost + 1) {
                cost[vecinCurent] = Cost + 1;
                Q.push(make_pair(vecinCurent, cost[vecinCurent]));
            }
        }
    }
}

void writeData() {
    int i;
    for (i = 1; i <= n; i++) {
        if (cost[i] == inf)
            fout << -1 << " ";
        else
            fout << cost[i] << " ";
    }
    fout << "\n";
}

int main() {
    readData();
    bfs();
    writeData();
    fin.close();
    fout.close();
    return 0;
}