class Solution {
public:
int *qx=new int[100000];
int *qy=new int[100000]; //保存当前坐标
void check(int x,int y,int &r,vector<vector<char>>& grid,int n,int m)
{
if(x>=0&&x<n&&y>=0&&y<m&&grid[x][y]=='1')
{
qx[r]=x;
qy[r]=y; //h++类似于出队列 因此从尾部入列
grid[x][y]='0';
r++;
}
}
void BFS(int x,int y,vector<vector<char>>& grid,int n,int m)
{
int h=0;
int r=1;
qx[0]=x;
qx[0]=y;
grid[x][y]='0';
while(h<r)
{
check(qx[h]-1,qy[h],r,grid,n,m);
check(qx[h]+1,qy[h],r,grid,n,m);
check(qx[h],qy[h]-1,r,grid,n,m);
check(qx[h],qy[h]+1,r,grid,n,m);
h++;
}
}
int numIslands(vector<vector<char>>& grid) {
int n=grid.size();
int m=grid[0].size();
int ans=0;
for(int x=0;x<n;x++)
{
for(int y=0;y<m;y++)
if(grid[x][y]=='1')
{
BFS(x,y,grid,n,m); //将1变为0
ans++;
}
}
return ans;
}
};
LeetCode200-NumberofIslands
最新推荐文章于 2020-03-29 16:55:46 发布