《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(43)阴阳镜照连通 - 岛屿数量(DFS、BFS)
《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(43)阴阳镜照连通 - 岛屿数量(DFS、BFS)
哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的阴阳镜湖,湖面上倒映着一片由二维网格构成的岛屿世界。湖边有一块巨大的石碑,上面刻着一行文字:“欲破此湖,需以阴阳镜之力,照连通,岛屿数量显真身。”
哪吒定睛一看,石碑上还有一行小字:“二维网格[ [1, 1, 0, 0], [1, 1, 1, 0], [0, 0, 0, 1] ]
中的岛屿数量为2
。”哪吒心中一动,他知道这是一道关于计算岛屿数量的难题,需要通过深度优先搜索(DFS)或广度优先搜索(BFS)的方法,找到所有连通的陆地块。
暴力解法:阴阳镜的初次尝试
哪吒心想:“要计算岛屿数量,我可以逐个格子检查。”他催动阴阳镜之力,从网格的左上角开始,逐个格子检查,一旦发现陆地(1
),就尝试向四个方向扩展,标记所有连通的陆地。
void dfs(vector<vector<int>>& grid, int i, int j) {
if (i < 0 || i >= grid.size() || j < 0 || j >= grid[0].size() || grid[i][j] != 1) return;
grid[i][j] = 0; // 将访问过的陆地标记为0
dfs(grid, i + 1, j);
dfs(grid, i - 1, j);
dfs(grid, i, j + 1);
dfs(grid, i, j - 1)