1254, Number of closed islands
====
DFS from each unvisited node/island problem
====
a)
----
1. 題目給予一個vec<vec<char>>的網絡(grid
生成一個vec<vec<bool>>的visited
來表示這個node是不是檢查過了
//因為DFS有上下左右 可能先前被查過了
2. (看題目)定義DFS的行為:
DFS( grid, visited, i, j, m, n )
->
如果超界, 如果是'0', 如果造訪過了 return
else,
visited改成true
這個node的上下左右去做DFS
3. 回到main(看題目)定義main的行為:
for for grid
如果是'1', 如果還沒造訪過 則
DFS( grid, visited, i, j, m, n )
count++
//因為DFS會做完, 能連到的都連完了, 才跳出
//就找到一個island
//如果for又找到 應該又是全新的island 故重新算重新加
====
class Solution{
void DFS( vec<vec<int>>&grid, vec<vec<bool>>&visited, int i, j, m, n){
if i<0 || j<0 || i>=m || j>=n || visited(i,j) || grid(i,j)!='1'
return
visited(i,j)=true
DFS( grid, visited, i-1, j, m, n)
DFS(i+1
DFS(j-1
DFS(j+1
}
public:
int closedIsland (vec<vec<int>>&grid){
int m=grid.size()
int n=grid[0].size()
vec<vec<bool>> visited(m, vec<bool>(n, false))
int count=0
for i-m
for j-n
if( grid [i][j] == '1' && !visited[i][j] ){
DFS( grid, visited, i, j, m, n)
count++
}
return count
}
};
沒有留言:
張貼留言