Last Day Where You Can Still Cross LeetCode solution in C++
1class Solution {2public:3int X[4] = {0, 0, -1, 1};4int Y[4] = {-1, 1, 0, 0};5int latestDayToCross(int row, int col, vector<vector<int>> &cells) {6int n = row;7int m = col;8vector<vector<int>> a(n, vector<int>(m, 0));9int x = 0;10for (auto xt : cells) {11int rr = xt[0];12int cc = xt[1];13rr--;14cc--;15if (!bfs(a, n, m)) break;16a[rr][cc] = 1;17x++;18}19if (x == 0) return x;20return x - 1;21}22bool bfs(vector<vector<int>> a, int n, int m) {23queue<pair<int, int>> q;24for (int i = 0; i < m; i++) {25if (a[0][i] == 0) {26q.push({0, i});27a[0][i] = 1;28}29}3031while (!q.empty()) {32int ss = q.size();33while (ss--) {34pair<int, int> pr = q.front();35q.pop();36int ii = pr.first;37int jj = pr.second;38if (ii == n - 1) return 1;39for (int i = 0; i < 4; i++) {40int nx = ii + X[i];41int ny = jj + Y[i];42if (nx >= 0 and nx < n and ny >= 0 and ny < m and a[nx][ny] == 0) {43q.push({nx, ny});44a[nx][ny] = 1;45}46}47}48}49return 0;50}51};