Cod sursa(job #1128362)

Utilizator muresan_bogdanMuresan Bogdan muresan_bogdan Data 27 februarie 2014 16:44:09
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<fstream>
#include<vector>
#include<queue>
using namespace std;

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

struct nod {
    int pas;
    bool vizitat;
    vector<int> vecini;
};

int n, m, i, x, y, s;
nod g[100001];
queue<int> coada;

void bfs(int x) {
    int j;
    for(j = 0; j < g[x].vecini.size(); j++) {
        int vecin = g[x].vecini[j];
        if(!g[vecin].vizitat) {
            g[vecin].vizitat = true;
            g[vecin].pas = g[x].pas + 1;
            coada.push(vecin);
        }
    }
}

int main() {
    fin >> n >> m >> s;
    for(i = 0; i < m; i++) {
        fin >> x >> y;
        g[x].vecini.push_back(y);
    }
    coada.push(s);
    g[s].pas = 0;
    g[s].vizitat = true;
    while(!coada.empty()) {
        int aux = coada.front();
        coada.pop();
        bfs(aux);
    }
    for(i = 1; i <= n; i++) {
        if(g[i].pas) {
            fout << g[i].pas << ' ';
        }else {
            if(i == s) {
                fout << '0' << ' ';
            } else {
                fout << "-1" << ' ';
            }
        }
    }
}