题解 | #岛屿数量#
岛屿数量
http://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e
DFS,将周边的全置为零即可
class Solution {
public:
/**
* 判断岛屿数量
* @param grid char字符型vector<vector<>>
* @return int整型
*/
void dfs(vector<vector<char> >& grid, int x, int y){
int n = grid.size();
int m = grid[0].size();
if(x < 0 || y < 0 || x >= n || y >= m){
return;
}
//自身位置处需要判定
if(grid[x][y] == '0'){
return;
}
//本题还有一种做法是用if来加条件限制,这个时候就不用上面的判定递归结束条件,因为如果都不满足if条件会自动退出递归
grid[x][y] = '0';
//四个方向遍历
dfs(grid, x-1, y);
dfs(grid, x+1, y);
dfs(grid, x, y-1);
dfs(grid, x, y+1);
}
int solve(vector<vector<char> >& grid) {
// write code here
int n = grid.size();
if( n == 0){ //判空
return 0;
}
int m = grid[0].size();
int count = 0; //记录岛屿数量
for(int i = 0; i < n; i++){ //遍历岛屿
for(int j = 0; j < m; j++){
if(grid[i][j] == '1'){
count++;
dfs(grid, i, j);
}
}
}
return count;
}
};
