Cod sursa(job #670539)
#include <iostream>
#include <fstream>
#define maxn 100005
#define maxm 1000005
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
int n,m,coada[maxn],viz[maxn],i,j,s,cost[maxn];
typedef struct graf
{
int nod;
graf *next;
}*grf;
grf list[maxm];
void add_nod(int x,int y)
{
grf q;
q=new graf;
q->nod=y;
q->next=list[x];
list[x]=q;
}
void citire_init()
{
int x,y;
f>>n; f>>m; f>>s;
for(i=1; i<=m ;i++)
{
f>>x;
f>>y;
add_nod(x,y);
}
for(i=1; i<=n ;i++)
{
coada[i]=0;
viz[i]=0;
cost[i]=-1;
}
coada[1]=s;
viz[s]=1;
cost[s]=0;
}
int search_nod(int x,int y)
{
grf q;
q=list[x];
while(q)
{
if(q->nod==y)
return 1;
q=q->next;
}
return 0;
}
void BFS()
{
int z,k,pi,ps;
pi=1;
ps=1;
while(ps<=pi)
{
z=coada[ps];
for(k=1; k<=n ;k++)
{
if(search_nod(z,k) && !viz[k])
{
cost[k]=cost[z]+1;
pi++;
coada[pi]=k;
viz[k]=1;
}
}
ps++;
}
}
int main()
{
citire_init();
BFS();
for(int i=1; i<=n ;i++)
{
g<<cost[i]<<" ";
}
return 0;
}