Pagini recente » Cod sursa (job #598517) | Cod sursa (job #1758042) | Cod sursa (job #2707609) | Cod sursa (job #1203786)
#include <cstdio>
#define infinit 1<<20
using namespace std;
FILE *f=fopen("bfs.in","r");
FILE *g=fopen("bfs.out","w");
int n,m;
int v[2][1000005],prim[100001];
int p[100001],c[500000],nrc;
int main()
{int i,j,s,x,y;
fscanf(f,"%d %d %d",&n,&m,&s);
for (i=1;i<=m;i++) {fscanf(f,"%d %d",&x,&y);
v[0][i]=y;
v[1][i]=prim[x];
prim[x]=i;
}
for (i=1;i<=n;i++) p[i]=infinit;
p[s]=0;
nrc=1;
c[nrc]=s;
i=1;
while (i<=nrc) {j=prim[c[i]];
while (j!=0) {if (p[c[i]]+1<p[v[0][j]]) {p[v[0][j]]=p[c[i]]+1;
c[++nrc]=v[0][j];
}
j=v[1][j];
}
i++;
}
for (i=1;i<=n;i++) if (p[i]==infinit) fprintf(g,"-1 ");
else fprintf(g,"%d ",p[i]);
return 0;
}