Cod sursa(job #1851888)

Utilizator usermeBogdan Cretu userme Data 20 ianuarie 2017 11:37:17
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <stdio.h>
#include <cstring>
using namespace std;

#define N 200000
#define M 1000000

int lst[N+1];
int urm[M+1],vf[M+1];
int nr,q[N+1],d[N+1];
int p=1, u=0;

void adauga(int x,int y)
{
    vf[++nr]=y;
    urm[nr]=lst[x];
    lst[x]=nr;
}

void bfs(int x0)
{
    int x,poz,y;

    memset(d, -1, sizeof(d));

    q[++u]=x0;
    d[x0]=0;

    while(p<=u)
    {
        x=q[p++];
        poz=lst[x];
        while(poz!=0)
        {
            y=vf[poz];
            if(d[y]==-1)
            {
                q[++u] = y;
                d[y]=d[x]+1;
            }
            poz=urm[poz];
        }
    }
}

int main()
{
    FILE *fin,*fout;

    fin=fopen("bfs.in","r");
    fout=fopen("bfs.out","w");

    int i,n,m,x,y,s;

    fscanf(fin,"%d%d%d",&n,&m,&s);

    for(i=1; i<=m; i++)
    {
        fscanf(fin,"%d%d",&x,&y);
        adauga(x,y);
    }

    bfs(s);

    for(i=1;i<=n;i++)
        fprintf(fout,"%d ",d[i]);
    return 0;
}