Pagini recente » Cod sursa (job #2791030) | Cod sursa (job #1131721) | Cod sursa (job #2192282) | Cod sursa (job #566105) | Cod sursa (job #1213682)
#include <cstdio>
#include <queue>
using namespace std;
int n,m,s,d[100001],v[100001];
struct nod
{
int x;
nod *u;
}*a[100001];
void read()
{
freopen("bfs.in","r",stdin);
int x;
nod *nd;
scanf("%d%d%d",&n,&m,&s);
while(m)
{
--m;
scanf("%d",&x);
nd=new nod;
nd->u=a[x];
a[x]=nd;
scanf("%d",&x);
nd->x=x;
}
}
void bfs(int x)
{
queue <int> q;
nod *nd;
q.push(x);
v[x]=1;
while(!q.empty())
{
nd=a[q.front()];
while(nd)
{
if(!v[nd->x])
{
v[nd->x]=1;
q.push(nd->x);
d[nd->x]=d[q.front()]+1;
}
nd=nd->u;
}
q.pop();
}
}
void write(int x)
{
freopen("bfs.out","w",stdout);
int i;
for(i=1;i<x;++i)
{
if(!d[i]) printf("-1 ");
else printf("%d ",d[i]);
}
printf("0 ");
for(i=x+1;i<=n;++i)
{
if(!d[i]) printf("-1 ");
else printf("%d ",d[i]);
}
}
int main()
{
read();
bfs(s);
write(s);
return 0;
}