Pagini recente » Cod sursa (job #1433165) | Cod sursa (job #2458109) | Cod sursa (job #1937035) | Cod sursa (job #2497599) | Cod sursa (job #1830991)
#include <stdio.h>
#include <iostream>
using namespace std;
FILE*f=fopen("bfs.in","r");
FILE*g=fopen("bfs.out","w");
int nr[100001],q[1000001],viz[100001],x,y,i,j,n,m,s;
struct nod{
int inf;
nod *urm;
}*v[1000001],*c;
void adaugare(nod *&prim,int x){
nod *nou;
nou=new nod;
nou->inf=x;nou->urm=NULL;
if(prim==NULL) prim=nou;
else {nou->urm=prim,prim=nou;}
}
void BF(int i){
nod *c;
int j,ss=0,p=1,u=1;
//q[1]=i;
viz[i]=1;
nr[i]=0;
int t;
q[1]=i;nr[1]=-1;
while (p<=u){
ss++;
//if(viz[p]==0)
//int tt=ss-1;
t=q[p];
for(c=v[t];c;c=c->urm){
// tt++;
if(!viz[c->inf])
{u++;
q[u]=c->inf;
//if(nr[c->inf]==-1)
// if(nr[t]!=-1)
nr[c->inf]=nr[t]+1;
viz[c->inf]=1;
}
}
p++;
}
}
int main()
{
fscanf(f,"%d%d%d",&n,&m,&s);
for(i=1;i<=n;i++) nr[i]=-1;
for(i=1;i<=m;i++){
fscanf(f,"%d%d",&x,&y);
if(x!=y) adaugare(v[x],y);
}
BF(s);
for(i=1;i<=n;i++)
if(nr[i]<=n)fprintf(g,"%d ",nr[i]);
fclose(f);
fclose(g);
return 0;
}