Pagini recente » Cod sursa (job #2088984) | Cod sursa (job #2485142) | Cod sursa (job #1805308) | Cod sursa (job #2167224) | Cod sursa (job #804809)
Cod sursa(job #804809)
# include <stdio.h>
# include <string.h>
using namespace std;
struct point {int inf; point *leg;};
point *p1, *ultim, *l[100010];
int n,x,y,s,q[100010],nod,i,p,u,drum[100010],m;
bool viz[100010];
void bfs()
{
while (p<=u)
{
nod=q[p];
while (l[nod])
if (viz[l[nod]->inf]==false)
{
u++;
q[u]=l[nod]->inf;
viz[l[nod]->inf]=true;
drum[l[nod]->inf]=drum[nod]+1;
l[nod]=l[nod]->leg;
}
else l[nod]=l[nod]->leg;
p++;
}
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
memset(l,NULL,sizeof(l));
scanf("%d %d %d\n",&n,&m,&s);
for (i=1; i<=m; i++)
{
p1 = new point;
scanf("%d %d\n",&x,&y);
p1->inf=y;
p1->leg=l[x];
l[x]=p1;
}
p=u=1;
q[p]=s;
viz[s]=true;
memset(drum,-1,sizeof(drum));
drum[s]=0;
bfs();
for (i=1; i<=n; i++)
printf("%d ",drum[i]);
printf("\n");
return 0;
}