Pagini recente » Cod sursa (job #2304346) | Cod sursa (job #2075804) | Cod sursa (job #2872100) | Cod sursa (job #2170186) | Cod sursa (job #1096382)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
#define NMAX 100003
int n, m, start;
int cost[NMAX];
bool used[NMAX];
vector <int> v[NMAX];
queue <int> q;
inline void read_data ()
{
scanf ("%d %d %d", &n, &m, &start);
for (int i = 1, a, b; i <= m; ++i)
{
scanf ("%d %d", &a, &b);
v[a].push_back (b);
}
}
void BFS (int s)
{
q.push (s);
used[s] = true;
cost[s] = 0;
while (!q.empty ())
{
int k = q.front ();
q.pop ();
for (vector <int> :: iterator it = v[k].begin (); it != v[k].end (); ++it)
{
if (!used[*it])
{
q.push (*it);
used[*it] = true;
cost[*it] = cost[k] + 1;
}
}
}
}
inline void write_data ()
{
for (int i = 1; i <= n; ++i)
{
if (used[i]) printf ("%d ", cost[i]);
else printf ("-1 ");
}
}
int main ()
{
freopen ("bfs.in", "r", stdin);
freopen ("bfs.out", "w", stdout);
read_data ();
BFS (start);
write_data ();
return 0;
}