Cod sursa(job #1808314)

Utilizator bogdi1bogdan bancuta bogdi1 Data 17 noiembrie 2016 16:44:50
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
const int Nmax=100001;
vector<int> g[Nmax];
vector<int> viz;
vector <int> d;
int n;
void bfs (int nod, int cc)
{
		queue<int>  q;
		int u,v,j;
		viz[nod]=cc;
		q.push(nod);
		while(!q.empty()){
            u=q.front();
            q.pop();
            for(j=0; j<g[u].size(); j++){
                v=g[u][j];
                if(!viz[v]){
                    viz[v]=cc;
                    d[v]=d[u]+1;
                    q.push(v);
                }
            }
		}
    }
int main()
{
    freopen("bfs.in", "r",stdin);
    freopen("bfs.out", "w",stdout);
    int m,i,u,v,cc,nod;
    scanf("%d%d%d", &n, &m, &nod);
    for(i=1; i<=m; i++){
        scanf("%d%d", &u, &v);
        g[u].push_back(v);
    }
    viz.assign(n+1,0);
    d.assign(n+1,0);
    cc=0;
    bfs(nod,1);
    for(i=1; i<=n; i++){
        if(viz[nod]==viz[i])
            printf("%d ", d[i]);
        else
            printf("-1 ");
    }
}