Pagini recente » Cod sursa (job #2482519) | Cod sursa (job #26883) | Cod sursa (job #2655995) | Cod sursa (job #1855867) | Cod sursa (job #1503257)
#include <iostream>
#include <fstream>
#include <queue>
#define nmax 100001
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
int n,m,s,viz[nmax];
struct nod
{
int nr;
nod *p;
}v[nmax];
queue <int> Q;
void add(int a,int b)
{
nod*q = new nod;
q->p = v[a].p;
q->nr = b;
v[a].p = q;
}
void read()
{
f>>n>>m>>s;
int a,b;
for(int i=1;i<=m;i++)
{
f>>a>>b;
add(a,b);
}
}
void BFS(int a)
{
viz[a]=0;
Q.push(a);
while(!Q.empty())
{
for(nod *q = v[Q.front()].p; q!=NULL; q=q->p)
{
if(viz[q->nr]==-1)
{
viz[q->nr]=viz[Q.front()]+1;
Q.push(q->nr);
}
}
Q.pop();
}
}
void solve()
{
BFS(s);
}
void write()
{
for(int i=1;i<=n;i++)g<<viz[i]<<" ";
}
int main()
{
read();
for(int i=1;i<=n;i++)viz[i]=-1;
solve();
write();
return 0;
}