1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| class Solution { public: int maximumMinimumPath(vector<vector<int>>& A) { int R = A.size(), C = A[0].size(); vector<vector<bool>> visited(R, vector<bool>(C)); auto cmp = [&A](const auto &a, const auto &b) { return A[a.first][a.second] < A[b.first][b.second]; }; priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)> pq(cmp); pq.emplace(0, 0); visited[0][0] = true; int res = INT_MAX, dr[] = {1, -1, 0, 0}, dc[] = {0, 0, 1, -1}; while (!pq.empty()) { auto [r, c] = pq.top(); pq.pop(); res = min(res, A[r][c]);
queue<pair<int, int>> q; q.emplace(r, c); while (!q.empty()) { auto [r, c] = q.front(); q.pop(); if (r == R - 1 && c == C - 1) return res; for (int i = 0; i < 4; ++i) { int rr = r + dr[i], cc = c + dc[i]; if (0 <= rr && rr < R && 0 <= cc && cc < C && !visited[rr][cc]) { if (A[rr][cc] < res) { pq.emplace(rr, cc); } else { q.emplace(rr, cc); } visited[rr][cc] = true; } } }
} return res; } };
|