Skip to content

Commit c31715b

Browse files
authored
Create 1254.cpp
1 parent 10e4347 commit c31715b

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

1254/1254.cpp

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
class Solution {
2+
public:
3+
int dx[4] = {0, 0, 1, -1};
4+
int dy[4] = {1, -1, 0, 0};
5+
bool valid(int r, int c, int n, int m){
6+
return (r >= 0 and r < n and c >= 0 and c < m);
7+
}
8+
void dfs(vector<vector<int>>& grid, int i, int j, int n, int m){
9+
grid[i][j] = 1;
10+
for(int k = 0; k < 4; k++){
11+
int r = i + dx[k];
12+
int c = j + dy[k];
13+
14+
if(valid(r, c, n, m) and grid[r][c] == 0)
15+
dfs(grid, r, c, n, m);
16+
}
17+
}
18+
19+
void dfs2(vector<vector<int>>& grid, int i, int j, int n, int m){
20+
grid[i][j] = 1;
21+
for(int k = 0; k < 4; k++){
22+
int r = i + dx[k];
23+
int c = j + dy[k];
24+
25+
if(valid(r, c, n, m) and grid[r][c] == 0)
26+
dfs2(grid, r, c, n, m);
27+
}
28+
}
29+
30+
int closedIsland(vector<vector<int>>& grid) {
31+
int n = grid.size();
32+
int m = grid[0].size();
33+
34+
for(int i = 0; i < n; i++){
35+
for(int j = 0; j < m; j++){
36+
if(grid[i][j] == 0 and (i == 0 || i == n-1 || j == 0 || j == m-1)){
37+
dfs(grid, i, j, n, m);
38+
}
39+
}
40+
}
41+
42+
int cnt = 0;
43+
for(int i = 0; i < n; i++){
44+
for(int j = 0; j < m; j++){
45+
if(grid[i][j] == 0){
46+
cnt++;
47+
dfs2(grid, i, j, n, m);
48+
}
49+
}
50+
}
51+
52+
return cnt;
53+
54+
}
55+
};

0 commit comments

Comments
 (0)