Pagini recente » Cod sursa (job #2884626) | Cod sursa (job #2417308) | Cod sursa (job #225595) | Cod sursa (job #656405) | Cod sursa (job #645110)
Cod sursa(job #645110)
#include <cstdio>
#include <stdlib.h>
//#include <alloc>
#define N 100005
using namespace std;
struct nod{
int x;
nod *urm;
}*a[N];
int viz[N],c[N],u,dist[N],n,m,k;
void add(int y,int z)
{
nod *l;
l=new nod;
l->x=z;
l->urm=a[y];
a[y]=l;
/*for (nod *i=l;i;i=i->urm)
if (i==NULL)
{
i=new nod;
i->x=z;
}*/
}
void read()
{
int y,z;
scanf("%d %d %d",&n,&m,&k);
for (int i=1;i<=m;i++)
{
scanf("%d %d",&y,&z);
add(y,z);
}
}
void bfs(int v)
{
viz[v]=1;
c[0]=v;
u=1;
for (int p=0;p<u;p++)
{
for (nod *i=a[c[p]];i;i=i->urm)
{
if (viz[i->x]==0)
{
c[u]=i->x;
viz[c[u]]=1;
dist[c[u]]=dist[dist[c[p]]]+1;
u++;
}
}
/*nod *l;
l=a[c[p]];
while (l!=NULL)
{
c[u]=l->x;
viz[c[u]]=1;
dist[c[u]]=dist[dist[p]]+1;
u++;
l=l->urm;
}*/
}
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
read();
bfs(k);
for (int i=1;i<=n;i++)
if (viz[i]==0)
printf("-1 ");
else
printf("%d ",dist[i]);
return 0;
}