Pagini recente » Cod sursa (job #1004293) | Cod sursa (job #2633108) | Cod sursa (job #65790) | Cod sursa (job #1314452) | Cod sursa (job #228663)
Cod sursa(job #228663)
//bfs cu coada implementata "de mana"
#include <cstdio>
#define N 100010
typedef struct noduri
{
int val;
noduri *urm;
} adr;
adr *L[N],*p,*li,*ls;
int n,m,i,x,y,nod,nr,rez[N];
char E[N];
void push(int x)
{
adr *p;
p=new adr;
p->val=x; p->urm=NULL;
if (!li)
{
li=p;
ls=li;
}
else
{
ls->urm=p;
ls=p;
}
}
void pop()
{
adr *p;
p=li;
li=li->urm;
delete p;
}
void bfs(int nod)
{
adr *p;
E[nod]=1;
for (push(nod); li; pop())
for (p=L[li->val]; p; p=p->urm)
if (!E[p->val])
{
E[p->val]=1;
rez[p->val]=1+rez[li->val];
push(p->val);
delete p;
}
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%d %d %d\n",&n,&m,&nod);
for (i=1; i<=m; i++)
{
scanf("%d %d\n",&x,&y);
p=new adr;
p->val=y; p->urm=L[x];
L[x]=p;
}
bfs(nod);
for (i=1; i<nod; i++)
if (rez[i]) printf("%d ",rez[i]);
else printf("-1 ");
printf("0 ");
for (i=nod+1; i<=n; i++)
if (rez[i]) printf("%d ",rez[i]);
else printf("-1 ");
return 0;
}