Pagini recente » Atasamentele paginii Clasament concurs_de_birou | Cod sursa (job #181269) | Cod sursa (job #1783375) | Cod sursa (job #684297) | Cod sursa (job #247951)
Cod sursa(job #247951)
#include<stdio.h>
const int nmax=100005, mmax=1000005;
int n,m,x0, d[nmax], *a[nmax];
void bfs(int x0)
{
int coada[nmax],p=0,u=0,x,y,i;
for(i=1;i<=n;++i)
d[i]=-1;
coada[u++]=x0;//adaug x0 in coada
d[x0]=0;//calculez distanta :D :D :D :D :D
while(p!=u)
{
x=coada[p++];//scot x din coada
for(i=1;i<=a[x][0];++i)
{
y=a[x][i];
if(d[y]==-1)
{
coada[u++]=y;
d[y]=1+d[x];
}
}
}
}
void citire()
{
freopen("bfs.in","r",stdin);
int x[mmax], y[mmax], i;
scanf("%d%d%d",&n,&m,&x0);
for(i=1;i<=m;i++)//citirea muchiilor
{
scanf("%d%d",&x[i],&y[i]);//citesc capetele muchiei
++d[x[i]];//maresc numarul de vecini ai capatului initial;
}
for(i=1;i<=n;++i)//alocarea matricei
{
a[i]=new int[d[i]];
a[i][0]=0;//a[i][0]=catzi vecini ai lui i am introdus;
}
for(i=1;i<=m;++i)//completarea matricei
a[x[i]][++a[x[i]][0]]=y[i];//l-am adaugat pe y[i] in lista de vecini ai lui x[i];
}
int main()
{
citire();
bfs(x0);
freopen("bfs.out","w",stdout);
for(int i=1;i<=n;i++)
printf("%d ", d[i]);
return 0;
}