@@ -12,43 +12,33 @@ class Solution {
12
12
public:
13
13
int swimInWater (vector<vector<int >>& grid) {
14
14
int n = grid.size ();
15
- if (n == 1 ) {
16
- return 0 ;
17
- }
18
-
19
15
vector<vector<bool >> visited (n, vector<bool >(n));
16
+ priority_queue<vector<int >, vector<vector<int >>, greater<vector<int >>> q;
17
+
20
18
visited[0 ][0 ] = true ;
19
+ q.push ({grid[0 ][0 ], 0 , 0 });
20
+
21
+ vector<vector<int >> dirs = {{0 , 1 }, {0 , -1 }, {1 , 0 }, {-1 , 0 }};
21
22
22
- int result = max (grid[0 ][0 ], grid[n - 1 ][n - 1 ]);
23
-
24
- priority_queue<vector<int >, vector<vector<int >>, greater<vector<int >>> pq;
25
- pq.push ({result, 0 , 0 });
26
-
27
- while (!pq.empty ()) {
28
- vector<int > curr = pq.top ();
29
- pq.pop ();
30
-
31
- result = max (result, curr[0 ]);
32
-
33
- for (int i = 0 ; i < 4 ; i++) {
34
- int x = curr[1 ] + dirs[i][0 ];
35
- int y = curr[2 ] + dirs[i][1 ];
36
-
37
- if (x < 0 || x >= n || y < 0 || y >= n || visited[x][y]) {
23
+ while (!q.empty ()){
24
+ int currR = q.top ()[1 ];
25
+ int currC = q.top ()[2 ];
26
+ int currT = q.top ()[0 ];
27
+ q.pop ();
28
+
29
+ if (currR == n - 1 && currC == n - 1 )
30
+ return currT;
31
+
32
+ for (auto & dir : dirs){
33
+ int newR = currR + dir[0 ];
34
+ int newC = currC + dir[1 ];
35
+ if (newR < 0 || newR == n || newC < 0 || newC == n || visited[newR][newC])
38
36
continue ;
39
- }
40
-
41
- if (x == n - 1 && y == n - 1 ) {
42
- return result;
43
- }
44
-
45
- pq.push ({grid[x][y], x, y});
46
- visited[x][y] = true ;
37
+ visited[newR][newC] = true ;
38
+ q.push ({max (currT, grid[newR][newC]), newR, newC});
47
39
}
48
40
}
49
-
41
+
50
42
return -1 ;
51
43
}
52
- private:
53
- vector<vector<int >> dirs = {{-1 , 0 }, {1 , 0 }, {0 , -1 }, {0 , 1 }};
54
44
};
0 commit comments