Cod sursa(job #1227762)

Utilizator george_stelianChichirim George george_stelian Data 11 septembrie 2014 16:28:45
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <cstdio>
#include <vector>

using namespace std;

vector<int>v[100010];
vector<int>::iterator it;
int v1[100010],sol[100010],n,m,x,y,nod,i,nr,st,dr,dist;
char vaz[100010];


int main()
{
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);
    scanf("%d%d%d",&n,&m,&nod);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d",&x,&y);
        v[x].push_back(y);
    }
    v1[++nr]=nod;
    vaz[nod]=1;
    st=dr=nr;
    while(st<=dr)
    {
        dist++;
        for(i=st;i<=dr;i++)
            for(it=v[v1[i]].begin();it!=v[v1[i]].end();it++)
                if(!vaz[*it])
                {
                    sol[*it]=dist;
                    v1[++nr]=*it;
                    vaz[*it]=1;
                }
        st=dr+1;
        dr=nr;
    }
    for(i=1;i<=n;i++)
        if(sol[i]==0 && i!=nod) printf("-1 ");
        else printf("%d ",sol[i]);
    return 0;
}