Pagini recente » Monitorul de evaluare | Cod sursa (job #1650206) | Cod sursa (job #1569805) | Statistici Lucie Lambert (llucie947) | Cod sursa (job #633040)
Cod sursa(job #633040)
#include <stdio.h>
#include <stdlib.h>
FILE *f,*g;
int **A,*C,m,n,s,*viz;
void citire()
{
int i,x,y;
f=fopen("bfs.in","r");
fscanf(f,"%d%d%d",&n,&m,&s);
g=fopen("bfs.out","w");
A=(int**)malloc((n+1)*sizeof(int*));
for(i=1;i<=n;i++)
{
A[i]=(int*)malloc(sizeof(int));
A[i][0]=0;
}
C=(int*)malloc((n+1)*sizeof(int));
viz=(int*)malloc((n+1)*sizeof(int));
for(i=1;i<=n;i++)
viz[i]=-1;
for(i=1;i<=m;i++)
{
fscanf(f,"%d%d",&x,&y);
A[x][0]++;
A[x]=(int*)realloc(A[x],(A[x][0]+1)*sizeof(int));
A[x][A[x][0]]=y;
}
fclose(f);
}
void bfs(int s)
{
int p=1,u=1,x,i;
C[1]=s;
viz[s]=0;
while(p<=u)
{
x=C[p];
for(i=1;i<=A[x][0] && viz[A[x][i]]==-1;i++)
{
viz[A[x][i]]=viz[x]+1;;
C[++u]=A[x][i];
}
p++;
}
}
int main()
{
int i;
citire();
bfs(s);
for(i=1;i<=n;i++)
fprintf(g,"%d ",viz[i]);
fclose(g);
return 0;
}