Pagini recente » Cod sursa (job #1166160) | Cod sursa (job #604684) | Cod sursa (job #2360561) | Cod sursa (job #920941) | Cod sursa (job #561204)
Cod sursa(job #561204)
#include<stdio.h>
#include<vector>
#define infile "bfs.in"
#define outfile "bfs.out"
#define noduri 100002
#define muchii 1000002
using namespace std;
long n,m,start; //nr de noduri, de muchii si nodul de start
long viz[noduri];//am ajuns la nodul i parcurgand viz[i] pasi
long coada[noduri];//coada
long s,f;//pozitia la care suntem si poz de sfarsit a cozii
long nrv[noduri];//numarul vecinilor nodului i;
vector<long> a[noduri];
void read()
{
long i,x,y;
scanf("%ld %ld %ld",&n,&m,&start);
for(i=1;i<=m;i++)
{
scanf("%ld %ld",&x,&y);
a[x].push_back(y);
nrv[x]++;
}
for(i=1;i<=n;i++)
viz[i]=-1;
}
void bfs()
{
long s,f,k,i,j,nod,ok=1;
s=1;
f=1;
coada[s]=start;
viz[start]=0;
while(ok)
{
k=0;
for(i=s;i<=f;i++)
{
nod=coada[i];
for(j=0;j<nrv[nod];j++)
{
if(viz[a[nod][j]]==-1)
{
k++;
coada[f+k]=a[nod][j];
viz[a[nod][j]]=viz[nod]+1;
}
}
}
s=f+1;
f+=k;
if(!k)
ok=0;
}
}
void write()
{
long i;
for(i=1;i<=n;i++)
printf("%ld ",viz[i]);
}
int main()
{
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
read();
bfs();
write();
fclose(stdin);
fclose(stdout);
return 0;
}