力扣:200岛屿数量
C++代码:
class Solution {
int dirs[4][2] = {{0,-1},{0,1},{1,0},{-1,0}};
public:
int numIslands(vector<vector<char>>& grid) {
int n = grid.size();
int m = grid[0].size();
int res = 0;
for(int i = 0;i<n;i++)
{
for(int j = 0;j<m;j++)
{
if(grid[i][j] == '1')
{
res++;
grid[i][j] = '0';
queue<pair<int,int>> q;
q.push({i,j});
while(!q.empty())
{
auto cell = q.front();
q.pop();
int r = cell.first;
int c = cell.second;
for(int i = 0;i<4;i++)
{
int X = r+dirs[i][0];
int Y = c+dirs[i][1];
if(X>=0 && X<n && Y>=0 && Y<m && grid[X][Y]=='1')
{
q.push({X,Y});
grid[X][Y] = '0';
}
}
}
}
}
}
return res;
}
};
思路(图解(以例题以为例))
/*
["0","1","1","1","0"],
["1","1","0","1","0"],
["1","1","0","0","0"],
["0","0","0","0","0"]
p(0,0)
r =0;c=0;
X=0 0 1 -1
Y=-1 1 0 0
["0","0","1","1","0"],
["0","1","0","1","0"],
["1","1","0","0","0"],
["0","0","0","0","0"]
p(0,1)(1,0)
r=0,c=1;
X=0 0 1 -1
Y=0 2 1 1
["0","0","0","1","0"],
["0","0","0","1","0"],
["1","1","0","0","0"],
["0","0","0","0","0"]
p(1,0)(0,2)(1,1)
r=1;c=0;
X=1 1 2 0
Y=-1 1 0 0
["0","0","0","1","0"],
["0","0","0","1","0"],
["0","1","0","0","0"],
["0","0","0","0","0"]
p(0,2)(1,1)(2,0)
r=0;c=2;
X=0 0 1 -1
Y=1 3 2 2
["0","0","0","0","0"],
["0","0","0","1","0"],
["0","1","0","0","0"],
["0","0","0","0","0"]
p(1,1)(2,0)(0,3)
r=1;c=1;
X=1 1 2 0
Y=0 2 1 1
["0","0","0","0","0"],
["0","0","0","1","0"],
["0","0","0","0","0"],
["0","0","0","0","0"]
p(2,0)(0,3)(2,1)
r=2;c=0;
X=2 2 3 1
Y=-1 1 0 0
["0","0","0","0","0"],
["0","0","0","1","0"],
["0","0","0","0","0"],
["0","0","0","0","0"]
p(0,3)(2,1)
r=0;c=3;
X=0 0 1 -1
Y=2 4 3 3
["0","0","0","0","0"],
["0","0","0","0","0"],
["0","0","0","0","0"],
["0","0","0","0","0"]
p(2,1)(1,3)
r=0;c=3;
X=0 0 1 -1
Y=2 4 3 3
*/