Pagini recente » Monitorul de evaluare | Cod sursa (job #1340223) | Cod sursa (job #2754112) | Cod sursa (job #1296534) | Cod sursa (job #1851533)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
const int NMAX = 100005;
int n, m, source;
vector < vector < int > > graph(NMAX);
int edges[NMAX];
bool seen[NMAX];
void read()
{
int x, y;
scanf("%d %d %d", &n, &m, &source);
for (int i = 1; i <= m; ++ i)
{
scanf("%d %d", &x, &y);
graph[x].push_back(y);
}
}
void bfs(int source)
{
int node;
queue < int > Q;
vector < int > :: iterator it;
Q.push(source);
seen[source] = true;
while (!Q.empty())
{
node = Q.front();
Q.pop();
for (it = graph[node].begin(); it != graph[node].end(); ++ it)
if (!seen[*it])
{
edges[*it] = edges[node] + 1;
Q.push(*it);
seen[*it] = true;
}
}
}
void print()
{
int i;
for (i = 1; i <= n; ++ i)
if (seen[i])
printf("%d ", edges[i]);
else
printf("-1 ");
printf("\n");
}
int main()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
read();
bfs(source);
print();
return 0;
}