Pagini recente » Cod sursa (job #2551185) | Cod sursa (job #2920756) | Cod sursa (job #1667602) | Cod sursa (job #2950635) | Cod sursa (job #1244838)
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int N, M, S;
vector<vector<int>> adj(100001);
vector<int> answer(100001, -1);
vector<bool> marked(100001, false);
void bfs(int start){
queue<pair<int, int>> q; // node_nr, distance from root
q.push(make_pair(start, 0));
marked[start] = true;
while(!q.empty()){
pair<int, int> next = q.front();
q.pop();
answer[next.first] = next.second;
for(int i = 0; i < adj[next.first].size(); i++){
if(!marked[adj[next.first][i]]){
marked[adj[next.first][i]] = true;
q.push(make_pair(adj[next.first][i], next.second + 1));
}
}
}
}
int main(){
int from, to;
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
scanf("%d%d%d", &N, &M, &S);
for(int i = 0; i < M; i++){
scanf("%d%d", &from, &to);
adj[--from].push_back(--to);
}
bfs(--S);
for(int i = 0; i < N; i++){
printf("%d ", answer[i]);
}
return 0;
}