Cod sursa(job #240981)

Utilizator firewizardLucian Dobre firewizard Data 9 ianuarie 2009 01:20:00
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>
#include <vector>
#define pb push_back
using namespace std;
vector<long> a[100001];
long j,i,l,n,m,x,y,s,v[100001],niv[100001];
int main()
{
    freopen ("bfs.in","r",stdin);
    freopen ("bfs.out","w",stdout);
    scanf("%ld %ld %ld\n",&n,&m,&s);
    for (i=1;i<=m;++i){
        scanf("%ld %ld",&x,&y);
        a[x].pb(y);
        }
    v[++l]=s;niv[s]=0;
    
    for (i=0;i<a[s].size();++i)
        if (niv[a[s][i]]==0&&a[s][i]!=s)
        v[++l]=a[s][i],
        niv[a[s][i]]=niv[s]+1;
    i=1;
    while (i<=l){
          i++;
          for (j=0;j<a[v[i]].size();++j)
              if(niv[a[v[i]][j]]==0&&a[v[i]][j]!=s){
                 v[++l]=a[v[i]][j];
                 niv[a[v[i]][j]]=niv[v[i]]+1;
                 }
          }
    for(i=1;i<=n;++i)
    if(niv[i]==0&&i!=s)niv[i]=-1;
    for(i=1;i<=n;++i)
    printf("%ld ",niv[i]);
    return 0;
}