算法思路
深度优先搜索
遍历数组中所有的元素。每次遇到一个岛屿就把他上下左右的值为1的点全部踩一遍,这些点的上下左右为1的点也全部踩一边,因为都是属于同一个岛屿,每踩一个点就将其设置为0,标示其已经踩过,避免重复踩点。这个点上下左右及衍生的所有点踩完之后,岛屿的个数+1;
程序整体编写没有什么问题,运行的时候才注意到传入的是个空数组的话需要直接返回0。
class Solution {
public:
/**
* @param grid: a boolean 2D matrix
* @return: an integer
*/
int v[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
void DFS(vector<vector<bool>> &grid,int i,int j)
{
if(i>=0&&i<grid.size()&&j>=0&&j<grid[0].size()&&grid[i][j]==1)
{
grid[i][j]=0;
//对上下左右的点进行判断
for(int k=0;k<4;k++)
{
DFS(grid,i+v[k][0],j+v[k][1]);
}
}
}
int numIslands(vector<vector<bool>> &grid) {
// write your code here
int n=grid.size();
//如果传入的是空数组,返回0
if(n==0) return 0;
int m=grid[0].size();
int sum=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(grid[i][j]==1)
{
DFS(grid,i,j);
sum++;
}
}
}
return sum;
}
};