给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
class Solution
{
constexpr static int x[4] = { 0, 1, 0, -1 };//移动数位表
constexpr static int y[4] = { 1, 0, -1, 0 };
public:
int numIslands(vector<vector<char>>& grid)
{
int n = grid.size();
if (!n)
{
return 0;
}
int m = grid[0].size();
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (grid[i][j] == '1')//找到一个岛屿的一个'1',然后将岛屿沉没,数量+1
{
num++;
grid[i][j] = '0';
queue<pair<int, int>> open;
open.emplace(i, j);
while (!open.empty())
{
int tx = open.front().first;
int ty = open.front().second;
open.pop();
for (int k = 0; k < 4; k++)
{
int mx = tx + x[k];
int my = ty + y[k];
if (mx >= 0 && mx < n && my >= 0 && my < m && grid[mx][my] == '1')
{
open.emplace(mx, my);
grid[mx][my] = '0';
}
}
}
}
}
}
return num;
}
public:
int num = 0;
};
本文介绍了一种使用C++编写的算法,通过遍历二维网格并利用队列数据结构,找出所有由水平和垂直相邻陆地连接的岛屿,并计算其总数。
985

被折叠的 条评论
为什么被折叠?



