力扣695
class Solution {
public:
bool check(vector<vector<int>>&grid,int r,int c)
{
return 0<=r&&r<grid.size()&&0<=c&&c<grid[0].size();
}//直接用1一个return判断是否符合
int max_area=0;
int area;//写两个全局变量,遍历之前area置0,每遍历一个格子area+1,一次调用结束,更新max_area
void dfs(vector<vector<int>>&grid,int r,int c)
{
if(!check(grid,r,c))
return;
if(grid[r][c]!=1)
return;
area++;
grid[r][c]=2;
dfs(grid,r-1,c);
dfs(grid,r+1,c);
dfs(grid,r,c-1);
dfs(grid,r,c+1);
}
int maxAreaOfIsland(vector<vector<int>>& grid) {
int row=grid.size();
int col=grid[0].size();
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
if(grid[i][j]==1)
{
area=0;
dfs(grid,i,j);
max_area=max(area,max_area);
}
}
}
return max_area;
}
};
200. 岛屿数量
class Solution {
public:
int count=0;
bool check(vector<vector<char>>& grid,int r,int c)
{
return 0<=r&&r<grid.size()&&c>=0&&c<grid[0].size();
}
void dfs(vector<vector<char>>& grid,int r,int c)
{
if(!check(grid,r,c))
{
return;
}
if(grid[r][c]!='1')return;
grid[r][c]='2';
dfs(grid,r+1,c);
dfs(grid,r-1,c);
dfs(grid,r,c+1);
dfs(grid,r,c-1);
}
int numIslands(vector<vector<char>>& grid) {
int row=grid.size();
int col=grid[0].size();
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
if(grid[i][j]=='1')
{
count++;
dfs(grid,i,j);
}
}
}
return count;
}
};
63. 岛屿的周长
class Solution {
public:
bool check(vector<vector<int>>& grid,int r,int c)
{
return 0<=r&&r<grid.size()&&c>=0&&c<grid[0].size();
}
int dfs(vector<vector<int>>& grid,int r,int c)
{
if(!check(grid,r,c))return 0;
if(grid[r][c]!=1)return 0;
//如果有(r,c)有4个邻接结点,return 0+dfs()....
//如果......有3个邻接顶点,return 1+dfs()
//.....
grid[r][c]=2;
int count=4;
if(r-1>=0&&(grid[r-1][c]==1||grid[r-1][c]==2))count--;
if(c-1>=0&&(grid[r][c-1]==1||grid[r][c-1]==2))count--;
if(r+1<grid.size()&&(grid[r+1][c]==1||grid[r+1][c]==2))count--;
if(c+1<grid[0].size()&&(grid[r][c+1]==1||grid[r][c+1]==2))count--;
return count+dfs(grid,r-1,c)+dfs(grid,r+1,c)+dfs(grid,r,c-1)+dfs(grid,r,c+1);
}
int islandPerimeter(vector<vector<int>>& grid) {
int row=grid.size();
int 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;
}
};
参考
:力扣