Почему получаю ошибку PE (Presentation Error)?
Вот условие задачи: Найдите путь с минимальным количеством пересадок между станциями.
Я решал, используя алгоритм поиска в ширину.
Вот мое решение:
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <climits>
using namespace std;
int bfs(map<int, vector<int>> graph, int v, set<int> visited, int goal, int rec){
int l = visited.size();
vector<int> neighbors;
visited.insert(v);
for (auto a : graph.find(v)->second) {
if (!(visited.count(a))) {
visited.insert(a);
neighbors.push_back(a);
}
}
if (visited.count(goal)) {
return rec;
}
int sum = 0;
if (l != visited.size()) {
for (auto a : neighbors) {
int new_rec = rec + 1;
sum += bfs(graph, a, visited, goal, new_rec);
}
return sum;
}
return 0;
}
int main()
{
int n;
cin >> n;
map<int, vector<int>> graph;
set<int> v;
for (int i = 0; i < n; i++) {
int a, b;
cin >> a >> b;
v.insert(a);
v.insert(b);
if (graph.find(a) != graph.end()) {
graph.find(a)->second.push_back(b);
}
else {
vector<int> cur;
cur.push_back(b);
graph.insert(make_pair(a, cur));
}
if (graph.find(b) != graph.end()) {
graph.find(b)->second.push_back(a);
}
else {
vector<int> cur;
cur.push_back(a);
graph.insert(make_pair(b, cur));
}
}
int start, finish;
cin >> start >> finish;
set<int> visited;
int res = bfs(graph, start, visited, finish, 0);
vector<int> check = graph.find(start)->second;
set<int> to_check;
for (auto a : check) {
to_check.insert(a);
}
if (res == 0 && to_check.count(finish)) {
cout << 0;
}
else if (res != 0) {
cout << res;
}
else {
cout << "No path found";
}
return 0;
}