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