Pagini recente » Cod sursa (job #1673587) | Cod sursa (job #2494909) | Cod sursa (job #2645570) | Cod sursa (job #1061664) | Cod sursa (job #1981895)
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 100005;
vector<int> graph[MAX_N];
int dist[MAX_N];
bool visited[MAX_N];
void bfs(int startNode)
{
dist[startNode] = 0;
queue<int> bfsQueue;
bfsQueue.push(startNode);
visited[startNode] = true;
while (!bfsQueue.empty())
{
int currentNode = bfsQueue.front();
bfsQueue.pop();
for (int neighbour=0;neighbour<graph[currentNode].size();neighbour++)
{
if (!visited[graph[currentNode][neighbour]])
{
visited[graph[currentNode][neighbour]] = true;
dist[graph[currentNode][neighbour]] = dist[currentNode] + 1;
bfsQueue.push(graph[currentNode][neighbour]);
}
}
}
}
int main()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
int N, M, v, x, y;
scanf("%d%d%d", &N, &M, &v);
for (int i = 1; i <= M; i += 1)
{
scanf("%d%d", &x, &y);
graph[x].push_back(y);
}
bfs(v);
for (int i = 1; i <= N; i += 1)
{
if(dist[i]==0&&i!=v)
printf("-1 ");
else
printf("%d ", dist[i]);
}
printf("\n");
return 0;
}