Pagini recente » Cod sursa (job #1768568) | Cod sursa (job #281320) | Cod sursa (job #1569724) | Cod sursa (job #576320) | Cod sursa (job #493239)
Cod sursa(job #493239)
#include<stdio.h>
#define MAX 1100001
int n,m,cont,v[2][MAX],s,scurt[100001],coada[2][MAX],prim,ultim;
void add(int x,int y)
{
if(!v[0][x])
{
v[1][x] = cont;
}
else
{
v[1][v[0][x]] = cont;
}
v[0][cont] = y;
v[0][x] = cont;
}
int main()
{
FILE*f = fopen("bfs.in","r");
fscanf(f,"%d %d %d",&n,&m,&s);
int i,a,b;cont = n+1;
for(i=1;i<=m;++i,++cont)
{
fscanf(f,"%d%d",&a,&b);
add(a,b);
}
prim = 1;
ultim = 2;
coada[0][prim] = s;
coada[1][prim] = 0;
int pas=0;
while(prim!=ultim)
{
pas = coada[1][prim]+1;
while(v[1][coada[0][prim]])
{
coada[0][ultim] = v[0][ v[1][ coada[0][prim] ] ];
v[1][coada[0][prim]] = v[1][ v[1][coada[0][prim]] ];
if(scurt[coada[0][ultim]] > pas || !scurt[coada[0][ultim]] && coada[0][ultim]!=s)scurt[coada[0][ultim]] = pas;
coada[1][ultim] = pas;
++ultim;
}
++prim;
}
FILE*g = fopen("bfs.out","w");
for(i=1;i<=n;++i)
{
if(!scurt[i] && i!=s)
fprintf(g,"-1 ");
else
fprintf(g,"%d ",scurt[i]);
}
fclose(g);
return 0;
}