Pagini recente » Cod sursa (job #138811) | Cod sursa (job #901656) | Cod sursa (job #2946732) | Cod sursa (job #332132) | Cod sursa (job #2777185)
//
// Created by Andrei Covaci on 03.09.2021.
//
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>
#define INPUT "bfs.in"
#define OUTPUT "bfs.out"
//#define INPUT "input.in"
//#define OUTPUT "output.out"
using namespace std;
pair<vector<vector<int> >, int> read() {
ifstream in(INPUT);
int n, m, s, tail, head;
in >> n >> m >> s;
vector<vector<int> > list;
for(int i = 0; i < n; ++i) {
list.push_back(vector<int>());
}
for(int i = 0; i < m; ++i) {
in >> tail >> head;
list[--tail].push_back(--head);
}
in.close();
return pair<vector<vector<int> >, int>(list, --s);
}
vector<int> solve(pair<vector<vector<int> >, int>& plist) {
auto list = plist.first;
int s = plist.second;
queue<pair<int, int> > q;
q.push(pair<int, int>(s, 0));
vector<int> len;
for(int i = 0; i < list.size(); ++i) {
len.push_back(-1);
}
vector<bool> visited;
for(int i = 0; i < list.size(); ++i) {
visited.push_back(false);
}
while(!q.empty()) {
pair<int, int> curr = q.front();
q.pop();
len[curr.first] = curr.second;
visited[curr.first] = true;
for(auto e : list[curr.first]) {
if(!visited[e]) {
q.push(pair<int, int>(e, curr.second + 1));
}
}
}
return len;
}
void print(vector<int>& l) {
ofstream out(OUTPUT);
for(auto e : l) {
out << e << ' ';
}
out.close();
}
int main() {
auto nums = read();
auto res = solve(nums);
print(res);
return 0;
}