笔试编程题
问题描述:
给一个01矩阵,求不同的岛屿的个数。
0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
样例
在矩阵:
[
[1, 1, 0, 0, 0],
[0, 1, 0, 0, 1],
[0, 0, 0, 1, 1],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 1]
]
总共有3个海岛。
求解:采用深搜(DFS)策略:
遍历过的元素置为false;
void DFS(vector<vector<bool>>& grid,int i,int j){
grid[i][j] = 0;
if(i>0&&grid[i-1][j])
DFS(grid,i-1,j);
if(j>0&&grid[i][j-1])
DFS(grid,i,j-1);
if(i<grid.size()-1 && grid[i+1][j])
DFS(grid,i+1,j);
if(j<grid[0].size()-1 && grid[i][j+1])
DFS(grid,i,j+1);
}
int numIslands(vector<vector<bool>>& grid) {
int count = 0;
for(int i = 0;i<grid.size();i++){
for(int j = 0;j<grid[0].size();j++){
if(grid[i][j]) {
DFS(grid,i,j);
count++;
}
}
}
return count;
}