Cod sursa(job #1779553)

Utilizator MiricaMateiMirica Matei MiricaMatei Data 15 octombrie 2016 13:58:03
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 100000;
const int VIZ = -1;
vector<int>v[NMAX + 5];
queue<int>q;
int dist[NMAX + 5];
void set_viz(int n){
    for (int i = 1; i <= n; i ++)
        dist[i] = VIZ;
}
void bfs(){
    int nod;
    while (!q.empty()){
        nod = q.front();
        q.pop();
        for (int i = 0; i < v[nod].size(); i ++)
            if (dist[v[nod][i]] == VIZ){
                dist[v[nod][i]] = dist[nod] + 1;
                q.push(v[nod][i]);
            }
    }
}
int main(){
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);
    int n, m, s, a, b;
    scanf("%d%d%d", &n, &m, &s);
    for (int i = 1; i <= m; i ++){
        scanf("%d%d", &a, &b);
        v[a].push_back(b);
    }
    q.push(s);
    set_viz(n);
    dist[s] = 0;
    bfs();
    for (int i = 1; i <= n; i ++)
        printf("%d ", dist[i]);
    return 0;
}