Pagini recente » Cod sursa (job #2267075) | Cod sursa (job #1603909) | Cod sursa (job #831004) | Cod sursa (job #2373543) | Cod sursa (job #1650095)
//http://www.infoarena.ro/problema/bfs - 20 pct
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
#define MAXN 100005
ifstream f("bfs.in");
ofstream g("bfs.out");
int n, m, s, prim, ultim, c[MAXN], o;
vector <int> G[MAXN];
bitset <MAXN> v;
void Read()
{
int b, y;
f >> n >> m >> s;
for(int i = 1; i <= m; i++)
f >> b >> y, G[b].push_back(y);
}
void bfs(int x[])
{
int varf, i;
o = 0; x[s] = 0;
bool p = 1;
while(prim <= ultim)
{
if(p)
o++;
p = 0;
varf = c[prim];
for(int k = 0; k < G[varf].size(); k++)
{
i = G[varf][k];
if(v[i] == 0)
ultim++, c[ultim] = i, v[i] = 1, x[i] = o, p = 1;
}
prim++;
}
}
int main()
{
int x[10000];
Read();
for(int i = 1; i <= n; i++)
x[i] = -1;
prim = ultim = 1;
c[prim] = s;
v[s] = 1;
bfs(x);
for(short i = 1; i <= n; i++)
cout << x[i] << " ";
return 0;
}