Pagini recente » Cod sursa (job #2540852) | Cod sursa (job #2304398) | Cod sursa (job #1636647) | Cod sursa (job #710044) | Cod sursa (job #1246764)
#include <cstdio>
#include <cstring>
#define NMAX 100000
using namespace std;
FILE *f1=fopen("bfs.in","r"),*f2=fopen("bfs.out","w");
struct nod
{
int inf;
nod *urm;
}*g[NMAX];
int n,m,s,i,u[NMAX],d[NMAX],c[NMAX];
void adauga(int i,int j)
{
nod *p;
p=new nod;
p->inf=j;
p->urm=g[i];
g[i]=p;
}
void bf(int sursa)
{
nod *p;
int st,dr,nod;
memset(u,0,sizeof(u));
st=dr=1;
c[st]=sursa;
u[sursa]=1;
for(d[sursa]=0;st<=dr;st++)
{
nod=c[st];
for(p=g[nod];p;p=p->urm)
if(!u[p->inf])
{
u[c[++dr]=p->inf]=1;
d[p->inf]=d[nod]+1;
}
}
}
int main()
{
fscanf(f1,"%d%d%d",&n,&m,&s);
for(i=1;i<=m;i++){int x,y;fscanf(f1,"%d%d",&x,&y);adauga(x,y);}
bf(s);
for(i=1;i<=n;i++)
if(i!=s&&d[i]==0) fprintf(f2,"-1 ");
else fprintf(f2,"%d ",d[i]);
fclose(f1);
fclose(f2);
return 0;
}