433. 岛屿的个数
class Solution {
public:
/*
* @param grid: a boolean 2D matrix
* @return: an integer
*/
vector<vector<bool>> grid;
void DFS(const int& i,const int& j)
{
if(grid[i][j]==0) return;
grid[i][j]=0;
if(i>0) DFS(i-1,j);
if(j>0) DFS(i,j-1);
if(i<grid.size()-1) DFS(i+1,j);
if(j<grid[0].size()-1) DFS(i,j+1);
}
int numIslands(vector<vector<bool>> &g) {
// write your code here
int count=0;
grid=move(g);
for(int i=0;i<grid.size();i++)
{
for(int j=0;j<grid[i].size();j++)
{
if(grid[i][j]!=0)
{
DFS(i,j);
count++;
}
}
}
return count;
}
};
BFS版:
class Solution {
public:
/*
* @param grid: a boolean 2D matrix
* @return: an integer
*/
vector<vector<bool>> grid;
queue<pair<int,int>> q;
void BFS(const int& i,const int& j)
{
q.push(pair<int,int>(i,j));
while(!q.empty())
{
int i=q.front().first;
int j=q.front().second;
grid[i][j]=0;
q.pop();
if(i>0 && grid[i-1][j]!=0) q.push(pair<int,int>(i-1,j));
if(j>0 && grid[i][j-1]!=0) q.push(pair<int,int>(i,j-1));
if(i<grid.size()-1 && grid[i+1][j]!=0) q.push(pair<int,int>(i+1,j));
if(j<grid[0].size()-1 && grid[i][j+1]!=0) q.push(pair<int,int>(i,j+1));
}
}
int numIslands(vector<vector<bool>> &g) {
// write your code here
int count=0;
grid=move(g);
for(int i=0;i<grid.size();i++)
{
for(int j=0;j<grid[i].size();j++)
{
if(grid[i][j]!=0)
{
BFS(i,j);
count++;
}
}
}
return count;
}
};