Pagini recente » Cod sursa (job #659919) | Cod sursa (job #1854009) | Cod sursa (job #664997) | Cod sursa (job #1700947) | Cod sursa (job #1830971)
#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){
//if(viz[p]==0)
ss++;
//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)nr[c->inf]=ss;
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;
}