Pagini recente » Cod sursa (job #772873) | Cod sursa (job #1196061) | Cod sursa (job #3192861) | Monitorul de evaluare | Cod sursa (job #652420)
Cod sursa(job #652420)
#include <fstream>
#define gL 100001
#define drumL 100001
#define useL 100001
#define qL 100002
using namespace std;
ifstream in;
ofstream out;
struct graf
{
int nod;
graf *link;
}*g[gL];
int use[useL],drum[drumL],q[qL];
inline void add_edge(int x,int y)
{
graf *p=new graf;
p->nod=y;
p->link=g[x];
g[x]=p;
}
inline void BFS(int nod)
{
for(graf *p=g[nod];p;p=p->link)
if(!use[p->nod])
{
q[++q[1]]=p->nod;
use[p->nod]=1;
drum[p->nod]=drum[nod]+1;
}
if(q[0]<=q[1])
BFS(q[++q[0]]);
}
int main()
{
int M,N,Source,x,y;
in.open("bfs.in");
in>>N>>M>>Source;
for(;M--;)
{
in>>x>>y;
add_edge(x,y);
}
in.close();
use[Source]=1;
q[0]=2;
q[1]=2;
q[2]=Source;
BFS(Source);
for(int i=1;i<=N;++i)
if(!use[i]) drum[i]=-1;
out.open("bfs.out");
for(int i=1;i<N;++i) out<<drum[i]<<' ';
out<<drum[N]<<'\n';
out.close();
return 0;
}