dfs
class Solution {
public:
int dir[4][2]={0,1,1,0,-1,0,0,-1};
//四个方向
void dfs(vector<vector<char>>&grid,vector<vector<bool>>& visit,int x,int y)
{
for(int i=0;i<4;i++)
{
int xx=x+dir[i][0],yy=y+dir[i][1];
if(xx<0||xx>=grid.size()||yy<0||yy>=grid[0].size())continue;
//越界
if(!visit[xx][yy]&&grid[xx][yy]=='1')
{
visit[xx][yy]=1;
dfs(grid,visit,xx,yy);
}
}
}
int numIslands(vector<vector<char>>& grid) {
int n=grid.size(),m=grid[0].size();
vector<vector<bool>>visit(n,vector<bool>(m,false));
int ant=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(!visit[i][j]&&grid[i][j]=='1')
{
visit[i][j]=1;
result++;
dfs(grid,visit,i,j);
}
}
}
return result;
}
};
bfs
class Solution {
public:
int dir[4][2]={0,1,1,0,-1,0,0,-1};
//四个方向
void bfs(vector<vector<char>>&grid,vector<vector<bool>>& visit,int x,int y)
{
pair<int,int> q[100000];int tt=-1,hh=0;
q[++tt]={x,y};
visit[x][y]=1;
while(hh<=tt)
{
int x1=q[hh].first,y1=q[hh].second;
hh++;
for(int i=0;i<4;i++)
{
int xx=x1+dir[i][0],yy=y1+dir[i][1];
if(xx<0||xx>=grid.size()||yy<0||yy>=grid[0].size())continue;
if(!visit[xx][yy]&&grid[xx][yy]=='1')
{
visit[xx][yy]=1;
q[++tt]={xx,yy};
}
}
}
}
int numIslands(vector<vector<char>>& grid) {
int n=grid.size(),m=grid[0].size();
vector<vector<bool>>visit(n,vector<bool>(m,false));
int ant=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(!visit[i][j]&&grid[i][j]=='1')
{
visit[i][j]=1;
ant++;
bfs(grid,visit,i,j);
}
}
}
return ant;
}
};