岛屿数量
2023-03-14 22:49:10 时间
法1:DFS深度优先遍历
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
class Solution {
public:
//DFS---深度优先遍历
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++)
{
//如果找到一个顶点为1,就利用dfs把其四周所有顶点找出来,并且设置为访问过的标记
if (grid[i][j] == '1')
{
dfs(grid,i,j);
count++;
}
}
}
return count;
}
void dfs(vector<vector<char>>& grid,int r,int c)
{
if (r < 0 || c < 0 || r >= grid.size() || c >= grid[0].size()||grid[r][c]=='0') return;
grid[r][c] = '0';
dfs(grid, r + 1, c);
dfs(grid, r, c + 1);
dfs(grid, r - 1, c);
dfs(grid, r, c - 1);
}
};
void test()
{
vector<vector<char>> grid ={
{'1','1', '0', '0', '0'} ,
{'1','1', '0', '0', '0'} ,
{'0','0', '1', '0', '0'} ,
{'0','0', '0', '1', '1'} ,
};
Solution s;
int ret=s.numIslands(grid);
cout << "岛屿数量有:" << ret << "个" << endl;
}
int main()
{
test();
return 0;
}
法2:BFS-----广度优先遍历
class Solution {
vector<vector<int>> dir = { {-1,0},{1,0},{0,1},{0,-1} };//记录方向的数组
public:
//BFS---广度优先遍历
int numIslands(vector<vector<char>>& grid)
{
if (grid.empty())
return 0;
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')
{
bfs(grid, i, j);
count++;
}
}
}
return count;
}
// 扩张陆地函数(扩张至极限,直到周围都是水,不存在可连接的陆地。目的是把可连接的陆地置为水)
void bfs(vector<vector<char>>& grid, int r, int c)
{
//将当前的陆地放入队列中,然后设置为已经访问的标志
queue<pair<int, int>> q;
q.push({ r,c });
grid[r][c] = '0';
//当队列为空,此次扩张完成
while (!q.empty())
{
//队头元素出队
pair<int,int> temp=q.front();
q.pop();
//四个方向同时扩张,直到遇到大海
//如果越界了,或者是水域,那么就跳过下面代码执行,继续将队列中剩余元素拿出来,进行扩张
int R = temp.first;//获取行
int C = temp.second;//获取列
for (int i = 0; i < 4; i++)
{
int rr = R + dir[i][0];
int cc = C + dir[i][1];
if (rr < 0 || cc < 0 || rr >= grid.size() || cc >= grid[0].size() || grid[rr][cc] == '0')
continue;
//把新找到的陆地加入队列
q.push({ rr,cc });
//入队就表示这块陆地已经合并至本岛屿,已经被使用过
grid[rr][cc] = '0';
}
}
}
};
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的