Pagini recente » Cod sursa (job #2965697) | Cod sursa (job #1832734) | Cod sursa (job #196756) | Cod sursa (job #300548) | Cod sursa (job #268036)
Cod sursa(job #268036)
#include <stdio.h>
#include <string.h>
struct lista
{
int nod;
struct lista *urm;
} *g[100001];
long n,m,t[100001],d[100001],c[100001],timp;
char u[100001];
void adauga(int i,int j)
{
struct lista *p;
p=new struct lista;
p->nod=j;
p->urm=g[i];
g[i]=p;
}
void bf(int start)
{
struct lista *p;
int nod,st,dr;
memset(u,0,sizeof(u));
st=dr=1;
c[st]=start;
u[start]=1;
for(d[start]=0; st<=dr; st++)
{
nod=c[st];
for(p=g[nod]; p!=NULL;p=p->urm)
if(!u[p->nod])
{
u[c[++dr]=p->nod]=1;
d[p->nod]=d[nod]+1;
t[p->nod]=nod;
}
}
}
int main()
{
int i,j,k,s;
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%ld %ld %ld",&n,&m,&s); k=m;
for(; k>0; k--)
{
scanf("%ld %ld",&i,&j);
adauga(i,j);
adauga(j,i);
}
bf(s);
for(i=1; i<=n; i++)
{
if(s!=i && !d[i]) printf("-1 ");
else printf("%ld ",d[i]);
}
return 0;
}