Cod sursa(job #1759453)

Utilizator eragon0502Dumitrescu Dragos eragon0502 Data 19 septembrie 2016 11:04:49
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <cstdio>
#include <vector>
using namespace std;

const int N = 100005;

vector <int> a[N];

int q[N];
int d[N];

void adauga(int x,int y){
a[x].push_back(y);
}

int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    int st,dr,x,y,i,n,m,s;
    scanf("%d %d %d",&n,&m,&s);
    for(i=1;i<=m;++i)
        {
            scanf("%d %d",&x,&y);
            adauga(x,y);
        }
    st=0;
    dr=-1;
    q[st]=s;
    ++dr;
    while(st<=dr){
    x=q[st++];
    for(i=0;i<a[x].size();++i)
        {
            y=a[x][i];
            if(d[y]==0&&y!=s)
                q[++dr]=y;
            d[s]=0;
            if(d[y]==0)
            d[y]=d[x]+1;
        }
    }
    for(i=1;i<=n;++i)
        {
        if(i==s)
            {
                printf("0 ");
            }
        else{
            if(d[i]==0)
                printf("-1 ");
            else
                printf("%d ",d[i]);
            }
        }
    return 0;
}