Pagini recente » Borderou de evaluare (job #637628) | Borderou de evaluare (job #3342230) | Borderou de evaluare (job #3364681) | Cod sursa (job #3364682) | Cod sursa (job #3364679)
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int NMAX = 100001;
vector<int> graf[NMAX];
int dist[NMAX];
bool vf[NMAX];
void makePaths(int start){
queue<int> codita;
codita.push(start);
dist[start] = 0;
vf[start] = 1;
while(!codita.empty()){
int node = codita.front();
codita.pop();
for(auto adjNode : graf[node]){
if(!vf[adjNode]){
vf[adjNode] =1;
codita.push(adjNode);
dist[adjNode] = dist[node] + 1;
}
}
}
}
int getDistance(int node){
return dist[node];
}
int main(void){
int n, m, source;
cin >> n >> m >> source;
for(int i = 1; i <= m;i++){
int a, b;
cin >> a >> b;
graf[a].push_back(b);
}
makePaths(source);
dist[source] = -1;
for(int i = 1;i <= n;i++){
cout << getDistance(i) << ' ';
}
}