Cod sursa(job #862353)

Utilizator RaduDoStochitoiu Radu RaduDo Data 22 ianuarie 2013 17:14:19
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<deque>
#include<list>
#define pb push_back
#define maxn 100050
using namespace std;
queue < int > q;
vector < int > G[maxn];
int i,n,m,s,x,y,M[maxn];
int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    scanf("%d%d%d",&n,&m,&s);
    for(;m--;)
    {
        scanf("%d%d",&x,&y);
        G[x].pb(y);
    }
    q.push(s);
    while(!q.empty())
    {
        x=q.front();
        for(std::vector<int>::iterator it=G[x].begin() ; it != G[x].end(); ++it)
            if((M[*it]==0||M[x]+1<M[*it])&&(*it!=s))
            {
                M[*it]=M[x]+1;
                q.push(*it);
            }
        q.pop();
    }
    for(i=1;i<=n;++i)
        if(i!=s&&M[i]==0)
            printf("-1 ");
        else
            printf("%d ",(i!=s)*M[i]);
    return 0;
}