Pagini recente » Cod sursa (job #1186651) | Cod sursa (job #2920706) | Diferente pentru problema/sirinf intre reviziile 3 si 2 | Cod sursa (job #1198573)
#include <cstdio>
int v[100001];
int c[100001];
int lst[2000005];
int urm[2000005];
int vf[2000005];
int nr;
int n;
FILE *in,*out;
void ad(int x,int y) {
nr++;
vf[nr]=y;
urm[nr]=lst[x];
lst[x]=nr;
}
void bfs(int x) {
int p=1,u=1,i,poz,a=0,cu;
v[x] = 1;
c[p]=x;
while(p<=u) {
x = c[p++];//scot x din coada
poz=lst[x];
while(poz!=0) {
if(v[vf[poz]]==0) {
u++;
c[u]=vf[poz];
v[vf[poz]] = 1 + v[x];
}
poz=urm[poz];
}
}
}
int main() {
in=fopen("bfs.in","r");
out=fopen("bfs.out","w");
int m,i,x,y,s;
fscanf(in,"%d%d%d",&n,&m,&s);
nr=0;
for(i=1; i<=m; i++) {
fscanf(in,"%d%d",&x,&y);
if(x!=y)
ad(x,y);
}
bfs(s);
for(i=1; i<=n; i++) {
if(v[i]>=1 && i!=s)
fprintf(out,"%d ",v[i]-1);
if(i==s)
fprintf(out,"0 ");
if(v[i]==0 && i!=s)
fprintf(out,"-1 ");
}
return 0;
}