給你一個由 ‘1’(陸地)和 ‘0’(水)組成的的二維網格,請你計算網格中島嶼的數量。
島嶼總是被水包圍,並且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連接形成。
此外,你可以假設該網格的四條邊均被水包圍。
簡要題解:
遍歷一下所有的島嶼遇到1的地方即從這個地方開始搜索 找到1的地方即設爲0,然後遍歷完整個數組即可。主要代碼如下:
class Solution {
public:
int row;int col;
int dx[4]={0,1,-1,0};
int dy[4]={1,0,0,-1};
void dfs(vector<vector<char>>& mp,int x,int y)
{
mp[x][y]='0';
for(int i=0;i<4;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
if(xx>=0&&xx<row&&yy>=0&&yy<col&&mp[xx][yy]=='1')
dfs(mp,xx,yy);
}
return ;
}
int numIslands(vector<vector<char>>& grid) {
if(grid.size()==0)return 0;
row=grid.size();col=grid[0].size();
int ans=0;
for(int i=0;i<row;i++)
for(int j=0;j<col;j++)
{
if(grid[i][j]=='1')
{
ans++;
dfs(grid,i,j);
}
}
return ans;
}
};