Minimum Jumps to Reach Home LeetCode solution in C++
1class Solution {2public:3typedef pair<int, bool> pi;4int minimumJumps(vector<int> &forbidden, int a, int b, int x) {5set<int> st(forbidden.begin(), forbidden.end());6vector<vector<int>> vis(2, vector<int>(10000, 0));7vis[0][0] = 1;8vis[1][0] = 1;9queue<pi> q;10q.push({0, true});11int ans = 0;12while (!q.empty()) {13int n = q.size();14for (int i = 0; i < n; i++) {15int curr = q.front().first;16bool canJumpBackward = q.front().second;17q.pop();18if (curr == x) return ans;19int p1 = curr + a;20int p2 = curr - b;21if (p1 < 10000 && vis[0][p1] == 0 && st.find(p1) == st.end()) {22q.push({p1, true});23vis[0][p1] = 1;24}25if (p2 >= 0 && vis[1][p2] == 0 && st.find(p2) == st.end() && canJumpBackward == true) {26q.push({p2, false});27vis[1][p2] = 1;28}29}30ans++;31}32return -1;33}34};