Skip to content

Commit eb16d71

Browse files
committed
Time: N/A (0%), Space: N/A (0%) - LeetHub
1 parent 9def5d0 commit eb16d71

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
class Solution {
2+
public:
3+
int maximumSafenessFactor(vector<vector<int>>& grid) {
4+
5+
int n = grid.size();
6+
7+
vector<vector<int>> safeness(n, vector<int>(n, 1e9));
8+
9+
int dy[4] = {0, 0, 1, -1};
10+
int dx[4] = {-1, 1, 0, 0};
11+
12+
queue<pair<int, int>> q;
13+
for (int i = 0; i < n; i++) {
14+
for (int j = 0; j < n; j++) {
15+
if (grid[i][j] == 1) {
16+
safeness[i][j] = 0;
17+
q.push({i, j});
18+
}
19+
}
20+
}
21+
22+
while (!q.empty()) {
23+
auto cur = q.front();
24+
q.pop();
25+
int x = cur.first, y = cur.second;
26+
for (int d = 0; d < 4; d++) {
27+
int nx = x + dx[d];
28+
int ny = y + dy[d];
29+
if (nx >= 0 && nx < n && ny >= 0 && ny < n &&
30+
safeness[nx][ny] > safeness[x][y] + 1) {
31+
safeness[nx][ny] = safeness[x][y] + 1;
32+
q.push({nx, ny});
33+
}
34+
}
35+
}
36+
priority_queue<array<int, 3>> pq;
37+
pq.push({safeness[0][0], 0, 0});
38+
vector<vector<bool>> vis(n, vector<bool>(n, false));
39+
while (!pq.empty()) {
40+
auto cur = pq.top();
41+
pq.pop();
42+
vis[cur[1]][cur[2]] = true;
43+
if (cur[1] == n - 1 && cur[2] == n - 1)
44+
return cur[0];
45+
for (int d = 0; d < 4; d++) {
46+
int nx = cur[1] + dx[d], ny = cur[2] + dy[d];
47+
if (nx >= 0 && nx < n && ny >= 0 && ny < n && !vis[nx][ny]) {
48+
pq.push({min(cur[0], safeness[nx][ny]), nx, ny});
49+
}
50+
}
51+
}
52+
return 0;
53+
}
54+
};

0 commit comments

Comments
 (0)