Pagini recente » Sport2 | Cod sursa (job #1238354) | Cod sursa (job #926589) | Cod sursa (job #1855383) | Cod sursa (job #448591)
Cod sursa(job #448591)
#include <cstdio>
using namespace std;
FILE *f=fopen("bfs.in","r");
FILE *g=fopen("bfs.out","w");
#define nmax 100005
struct graf
{
int x;
graf *urm;
};
graf *G[nmax];
bool viz[nmax],vizq[nmax];
int N,S;
int L[nmax];
int Q[5*nmax],k;
void add(graf *&g,int x)
{
graf *p=new graf;
p->x=x;
p->urm=g;
g=p;
}
void bfs()
{
Q[++k]=S;
int i,x;
viz[S]=true;
L[S]=0;
for(i=1;i<=k;i++)
{
x=Q[i];
for(graf *g=G[x];g!=NULL;g=g->urm)
{
if(!viz[g->x])
{
L[g->x]=L[x]+1;
viz[g->x]=true;
Q[++k]=g->x;
}
}
}
}
void read()
{
int M,i,x,y;
fscanf(f,"%d %d %d",&N,&M,&S);
for(i=1;i<=M;i++)
{
fscanf(f,"%d %d",&x,&y);
add(G[x],y);
}
for(i=1;i<=N;i++) L[i]=-1;
}
int main()
{
read();
bfs();
for(int i=1;i<=N;i++)
fprintf(g,"%d ",L[i]);
return 0;
}