Pagini recente » Cod sursa (job #613146) | Cod sursa (job #809070) | Cod sursa (job #2664367) | Cod sursa (job #68210) | Cod sursa (job #1759438)
#include <stdio.h>
#define maxn 100005
#define maxm 1000005
#define lim 2000000000
int d[maxn],ind[maxn],lista[maxn];
struct muchie{int x,y,next;};
muchie v[maxm];
int main(){
FILE *fin,*fout;
fin=fopen("bfs.in","r");
fout=fopen("bfs.out","w");
int i,j,k,n,m,s,st,dr;
fscanf(fin,"%d%d%d",&n,&m,&s);
for(i=1;i<=n;i++)
d[i]=lim;
for(i=1;i<=m;i++){
fscanf(fin,"%d%d",&v[i].x,&v[i].y);
if(ind[v[i].x]==0)
ind[v[i].x]=i;
else{
v[i].next=ind[v[i].x];
ind[v[i].x]=i;
}
}
st=1;
dr=1;
lista[st]=s;
d[s]=0;
while(st<=dr){
k=ind[lista[st]];
while(k!=0){
if(d[v[k].y]==lim){
d[v[k].y]=d[lista[st]]+1;
dr++;
lista[dr]=v[k].y;
}
k=v[k].next;
}
st++;
}
for(i=1;i<=n;i++){
if(d[i]==lim)
fprintf(fout,"-1 ");
else
fprintf(fout,"%d ",d[i]);
}
fclose(fin);
fclose(fout);
return 0;
}