Pagini recente » Cod sursa (job #2483077) | Cod sursa (job #2866387) | Cod sursa (job #745973) | Cod sursa (job #3161546) | Cod sursa (job #305985)
Cod sursa(job #305985)
#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;
}