Pagini recente » Cod sursa (job #3122930) | Cod sursa (job #2262808) | Cod sursa (job #2999483) | Cod sursa (job #2320018) | Cod sursa (job #3249622)
#include<vector>
#include<fstream>
#include<queue>
using namespace std;
int n, m, s;
vector<vector<int>> adj(100005);
vector<int> ans(100005,-1);
int bfs(int s, vector<vector<int>> &adj) {
vector<int> visited(100005, 0);
ans[s] = 0;
queue<pair<int,int>> q;
q.push({s,1});
visited[s] = true;
while(!q.empty()) {
auto [node,dist] = q.front();
q.pop();
for(auto neighbour : adj[node]) {
if(!visited[neighbour]) {
if(ans[neighbour] == -1) {
ans[neighbour] = dist;
}
q.push({neighbour,dist + 1});
visited[neighbour] = true;
}
}
dist ++;
}
return -1;
}
int main() {
ifstream fin("bfs.in");
ofstream fout("bfs.out");
fin >> n >> m >> s;
for(int i = 1 ; i<=m ; i++) {
int x, y;
fin >> x >> y;
adj[x].push_back(y);
}
bfs(s, adj);
for(int i = 1 ; i <= n ; i++) {
fout << ans[i] << " ";
}
}