题目:
代码(首刷看解析 2024年3月7日):
class Solution {
public:
void dfs(vector<vector<char>>& grid, int i, int j) {
int nr = grid.size();
int nc = grid[0].size();
grid[i][j] = '2';
if (i - 1 >= 0 && grid[i - 1][j] == '1') dfs(grid, i - 1, j);
if (i + 1 < nr && grid[i + 1][j] == '1') dfs(grid, i + 1, j);
if (j - 1 >= 0 && grid[i][j - 1] == '1') dfs(grid, i, j - 1);
if (j + 1 < nc && grid[i][j + 1] == '1') dfs(grid, i, j + 1);
}
int numIslands(vector<vector<char>>& grid) {
int nr = grid.size();
if (nr == 0) return 0;
int nc = grid[0].size();
int count = 0;
for (int i = 0; i < nr; ++i) {
for (int j = 0; j < nc; ++j) {
if (grid[i][j] == '1') {
count++;
dfs(grid, i, j);
}
}
}
return count;
}
};
代码(二刷看解析 2024年3月18日 BFS)
class Solution {
public:
int dir[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
void bfs(vector<vector<char>>& grid, int row, int col)
{
queue<pair<int,int>> q;
q.push({row,col});
grid[row][col] = '2';
while (!q.empty())
{
pair<int,int> cur = q.front(); q.pop();
int oldrow = cur.first;
int oldcol = cur.second;
for (int i = 0; i < 4; ++i)
{
int newrow = oldrow + dir[i][0];
int newcol = oldcol + dir[i][1];
if (newrow < 0 || newrow >= grid.size() || newcol < 0 || newcol >= grid[0].size()) continue;
if (grid[newrow][newcol] == '1')
{
bfs(grid, newrow, newcol);
grid[newrow][newcol] = '2';
}
}
}
}
int numIslands(vector<vector<char>>& grid) {
int m = grid.size();
int n = grid[0].size();
int count = 0;
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
{
if (grid[i][j] == '1')
{
bfs(grid, i, j);
count++;
}
}
}
return count;
}
};
代码(二刷自解 2024年3月18日 DFS)
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
int count = 0;
for (int i = 0; i < grid.size(); ++i)
{
for (int j = 0; j < grid[0].size(); ++j)
{
if (grid[i][j] == '1')
{
count++;
dfs(grid, i, j);
}
}
}
return count;
}
int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
void dfs(vector<vector<char>>& grid, int row, int col)
{
for (int i = 0; i < 4; ++i)
{
int newrow = row + dir[i][0];
int newcol = col + dir[i][1];
if (newrow >= 0 && newrow < grid.size() && newcol >= 0
&& newcol < grid[0].size() && grid[newrow][newcol] == '1')
{
grid[newrow][newcol] = '2';
dfs(grid, newrow, newcol);
}
}
}
};
代码(三刷自解 2024年4月13日 10min)
class Solution {
public:
// dfs
int dir[4][2] = {1,0,-1,0,0,1,0,-1};
void dfs(vector<vector<char>>& grid, int row, int col) {
grid[row][col] = '2';
// 遍历
for (int i = 0; i < 4; ++i) {
int newrow = row + dir[i][0];
int newcol = col + dir[i][1];
if (newrow < 0 || newrow >= grid.size() ||
newcol < 0 || newcol >= grid[0].size()) continue;
if (grid[newrow][newcol] == '1') {
//grid[newrow][newcol] = '2';
dfs(grid, newrow, newcol);
}
}
}
int numIslands(vector<vector<char>>& grid) {
int count = 0;
for (int i = 0; i < grid.size(); ++i) {
for (int j = 0; j < grid[0].size(); ++j) {
if (grid[i][j] == '1') {
dfs(grid, i, j);
count++;
}
}
}
return count;
}
};
代码(四刷自解 2024年7月30日)
class Solution {
private:
const int dir[4][2] = {1,0,-1,0,0,1,0,-1};
void DFS(vector<vector<char>>& grid, int row, int col) {
grid[row][col] = '2';
for (int i = 0; i < 4; i ++) {
int newRow = row + dir[i][0];
int newCol = col + dir[i][1];
if (newRow >= 0 && newRow < grid.size() && newCol >= 0 && newCol < grid[0].size()
&& grid[newRow][newCol] == '1') {
BFS(grid, newRow, newCol);
}
}
}
public:
int numIslands(vector<vector<char>>& grid) {
// DFS
int res = 0;
int m = grid.size(), n = grid[0].size();
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid[i][j] == '1') {
DFS(grid, i, j);
res++;
}
}
}
return res;
}
};