Pagini recente » Cod sursa (job #171671) | Rating Visanu Adrian (Visanu_Adrian_321CC) | Cod sursa (job #1625263) | Cod sursa (job #941552) | Cod sursa (job #276870)
Cod sursa(job #276870)
#include<stdio.h>
int N,M,S,viz[100000];
int st,sf,niv;
int n[100000];
int coada[100000];
typedef struct Nod
{
int k;
struct Nod *urm;
}*pNod;
pNod v[100001];
void add(pNod &dest,int x)
{
pNod p;
p = new Nod;
p->k=x;
p->urm=dest;
dest=p;
}
void citire()
{
int i,x,y;
FILE *in = fopen("bfs.in","rt");
fscanf(in,"%d %d %d",&N,&M,&S);
for(i=1;i<=N;i++) n[i]=-1;
for(i=1;i<=M;i++)
{
fscanf(in,"%d %d",&x,&y);
add(v[x],y);
}
fclose(in);
}
void bf(int S)
{
pNod p;
st=sf=1;
coada[st]=S;
viz[S]=1;
n[S]=0;
sf++;
while(st<sf)
{
for(p=v[coada[st]];p!=NULL;p=p->urm)
if(!viz[p->k])
{
viz[p->k]=1;
coada[sf]=p->k;
sf++;
n[p->k]=n[coada[st]]+1;
}
st++;
}
}
int main()
{
int i,nr=0;
citire();
bf(S);
FILE *out=fopen("bfs.out","wt");
for(i=1;i<=N;i++)
fprintf(out,"%d ",n[i]);
fclose(out);
return 0;
}