Untitled
unknown
c_cpp
a year ago
1.6 kB
14
Indexable
#include <iostream> #include <vector> #include <queue> #include <climits> using namespace std; int bfs(const vector<vector<int>>& adj_list, int src, int dest) { vector<bool> visited(adj_list.size(), false); vector<int> distance(adj_list.size(), INT_MAX); queue<int> q; q.push(src); visited[src] = true; distance[src] = 0; while (!q.empty()) { int current = q.front(); q.pop(); for (int neighbor : adj_list[current]) { if (!visited[neighbor]) { visited[neighbor] = true; distance[neighbor] = distance[current] + 1; q.push(neighbor); } } } return distance[dest] == INT_MAX ? -1 : distance[dest]; } int nearestMeetingCell(int N, const vector<int>& edges, int src, int dest) { vector<vector<int>> adj_list(N); for (int i = 0; i < N; ++i) { int next_node = edges[i]; if (next_node != -1) { adj_list[i].push_back(next_node); } } int distance1 = bfs(adj_list, src, dest); int distance2 = bfs(adj_list, dest, src); if (distance1 == -1 || distance2 == -1) { return -1; } return min(distance1, distance2); } void solution_function() { int n; cin >> n; vector<int> edges(n); for (int i = 0; i < n; ++i) { cin >> edges[i]; } int src, dest; cin >> src >> dest; int result = nearestMeetingCell(n, edges, src, dest); cout << result << endl; } int main() { solution_function(); return 0; }
Editor is loading...
Leave a Comment