Pagini recente » Cod sursa (job #2083133) | Cod sursa (job #737824) | Cod sursa (job #25929) | Cod sursa (job #2371666) | Cod sursa (job #1851888)
#include <stdio.h>
#include <cstring>
using namespace std;
#define N 200000
#define M 1000000
int lst[N+1];
int urm[M+1],vf[M+1];
int nr,q[N+1],d[N+1];
int p=1, u=0;
void adauga(int x,int y)
{
vf[++nr]=y;
urm[nr]=lst[x];
lst[x]=nr;
}
void bfs(int x0)
{
int x,poz,y;
memset(d, -1, sizeof(d));
q[++u]=x0;
d[x0]=0;
while(p<=u)
{
x=q[p++];
poz=lst[x];
while(poz!=0)
{
y=vf[poz];
if(d[y]==-1)
{
q[++u] = y;
d[y]=d[x]+1;
}
poz=urm[poz];
}
}
}
int main()
{
FILE *fin,*fout;
fin=fopen("bfs.in","r");
fout=fopen("bfs.out","w");
int i,n,m,x,y,s;
fscanf(fin,"%d%d%d",&n,&m,&s);
for(i=1; i<=m; i++)
{
fscanf(fin,"%d%d",&x,&y);
adauga(x,y);
}
bfs(s);
for(i=1;i<=n;i++)
fprintf(fout,"%d ",d[i]);
return 0;
}