Pagini recente » Cod sursa (job #1112519) | Cod sursa (job #1525819) | Cod sursa (job #2047193) | Cod sursa (job #2313319) | Cod sursa (job #1713837)
#include <iostream>
#include <fstream>
#include <map>
#include <vector>
#include <list>
#include <iterator>
#include <queue>
#include <algorithm>
#include <tuple>
using namespace std;
ifstream in ("bfs.in");
ofstream out ("bfs.out");
void read(int M, vector<vector<int>> &adj){
int X, Y;
while(M--){
in >> X >> Y;
adj[X].push_back(Y);
}
}
vector<int> bfs(const vector<vector<int>> &adj, int S, int N){
queue<int> coada;
vector<bool> visited(N+1);
vector<int> distance(N+1);
coada.push(S);
distance[S] = 0;
visited[S] = true;
while(!coada.empty()){
for(auto &nod : adj[coada.front()]){
if(visited[nod] == false){
distance[nod] = distance[coada.front()] + 1;
visited[nod] = true;
coada.push(nod);
}
}
coada.pop();
}
vector<int> result;
for(int i = 1; i <= N; i++){
if(visited[i])
result.push_back(distance[i]);
else
result.push_back(-1);
}
return result;
}
int main(){
int N, M, S;
in >> N >> M >> S;
vector<vector<int>> adj(N+1);
read(M, adj);
for(const auto &val : bfs(adj, S, N))
out << val << ' ';
return 0;
}