Cod sursa(job #879130)

Utilizator MIonutMistreanu Ionut MIonut Data 14 februarie 2013 23:32:26
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<cstdio>
#include<vector>
#define Nmax 100004
using namespace std;
vector<int>v[Nmax];
vector<int>:: iterator it;
int n,m,s,cont,c[Nmax],t[Nmax],viz[Nmax];
void citire()
{
    freopen("bfs.in","r",stdin);
    scanf("%d%d%d",&n,&m,&s);
    for(int x,y,i=1; i<=m; ++i)
    {
        scanf("%d%d",&x,&y);
        v[x].push_back(y);
    }
}
void bfs(int x, int si, int sf)
{
    c[si]=x;
    viz[x]=1;
    while(si<=sf)
    {
        for(it=v[c[si]].begin(); it<v[c[si]].end(); ++it)
            if(!viz[*it])
            {
                c[++sf]=*it;
                t[sf]=t[si]+1;
                viz[*it]=t[sf];
            }
        ++si;
    }
}
int main()
{
    citire();
    bfs(s,1,1);
    freopen("bfs.out","w",stdout);
    viz[s]=0;
    for(int i=1; i<=n; ++i)
        if(!viz[i] && i!=s) printf("%d ",-1);
        else printf("%d ",viz[i]);
    return 0;
}