Cod sursa(job #305985)

Utilizator utcistuBarcau Tomsa utcistu Data 19 aprilie 2009 02:44:14
Problema BFS - Parcurgere in latime Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.97 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define VMAX 100010
#define EMAX 1000010

int start[EMAX],Q[VMAX],target[EMAX],prev[EMAX],last[VMAX],dist[VMAX];
int edgeNo,nodeNo,source;

int main()
{
    int i,x,y,pop,push;
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    scanf("%d %d %d",&nodeNo,&edgeNo,&source);source--;
    for (i=0;i<nodeNo;i++)
    {
        last[i]=-1;
        dist[i]=-1;
    }
    pop=1;push=1;
    for (i=0;i<edgeNo;i++)
    {
        scanf("%d %d",&x,&y);x--;y--;
        start[i]=x;target[i]=y;prev[i]=last[x];last[x]=i;
    }
    dist[source]=0;
    Q[push]=source;
    for (;pop<=push;pop++)
        for (i=last[Q[pop]];i>=0;i=prev[i])
            if (dist[target[i]]<0)
                {
                    Q[++push]=target[i];
                    dist[target[i]]=dist[start[i]]+1;
                }
    for (i=0;i<nodeNo;i++) printf("%d ",dist[i]);
    fclose(stdout);
    return 0;
}