Pagini recente » Cod sursa (job #671621) | Cod sursa (job #1460577) | Cod sursa (job #1062600) | Cod sursa (job #1739792) | Cod sursa (job #260158)
Cod sursa(job #260158)
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define M 1000002
#define N 100002
long muc[M], urm[M], pnt[N],dist[N];int viz[N];
typedef struct nod
{long n;
nod* urm;
}*pnod;
pnod beg,end;
void adauga_nod(long var)
{if(beg==NULL)
{beg=(nod*) malloc(sizeof(nod));
end=beg;
(*beg).n=var;
(*beg).urm=NULL;
}
else
{pnod p=(nod*) malloc(sizeof(nod));
(*p).n=var;
(*end).urm=p;
(*p).urm=NULL;
end=p;
}
}
void sterge_nod()
{pnod p=beg;
if(p)
{beg=(*beg).urm;
free(p);
}
}
int main ()
{FILE *fin=fopen("bfs.in","r");
FILE *fout=fopen("bfs.out","w");
long n,m,s,i,x,y,vf;
fscanf(fin,"%ld%ld%ld",&n,&m,&s);
for (vf=1,i=0;i<m;i++)
{fscanf(fin,"%ld%ld",&x,&y);
muc[vf]=y;
urm[vf]=pnt[x];
pnt[x]=vf;
vf++;
}
for(i=1;i<=n;i++)
{dist[i]=-1;
}
memset(viz,0,sizeof(viz));
adauga_nod(s);
dist[s]=0;
viz[s]=1;
while(beg!=NULL)
{x=(*beg).n;
sterge_nod();
for (i=pnt[x];i;i=urm[i])
{if(viz[muc[i]]==0)
{viz[muc[i]]=1;
dist[muc[i]]=dist[x]+1;
adauga_nod(muc[i]);
}
}
}
for (i=1;i<=n;i++)
{fprintf(fout,"%ld ",dist[i]);
}
fclose(fout);
return 0;
}