Pagini recente » Cod sursa (job #2855066) | Cod sursa (job #2404938) | Cod sursa (job #1623377) | Cod sursa (job #1343757) | Cod sursa (job #277860)
Cod sursa(job #277860)
#include <stdio.h>
#define dim 100010
struct nod
{
int nr;
nod *urm;
};
int n, m, s, fol[dim];
nod *prim[dim];
void add(nod *&p, int nr)
{
nod *n1=new nod;
n1->nr=nr;
n1->urm=p;
p=n1;
}
void bfs(int s)
{
int i, st, dr, v[dim];
nod *cur;
for (i=1; i<=n; i++) fol[i]=-1;
fol[s]=0;
v[0]=s;
st=dr=0;
while (st<=dr)
{
cur=prim[v[st]];
while (cur)
{
if (fol[cur->nr]==-1)
{
v[++dr]=cur->nr;
fol[cur->nr]=fol[v[st]]+1;
}
cur=cur->urm;
}
st++;
}
}
void del()
{
int i;
nod *p;
for (i=1; i<=n; i++)
{
while (prim[i])
{
p=prim[i];
prim[i]=prim[i]->urm;
delete p;
}
}
}
int main()
{
int i, a, b;
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
scanf("%d %d %d\n", &n, &m, &s);
for (i=1; i<=m; i++)
{
scanf("%d %d\n", &a, &b);
if (a!=b) add(prim[a], b);
}
bfs(s);
for (i=1; i<=n; i++) printf("%d ", fol[i]);
del();
return 0;
}