本文共 1223 字,大约阅读时间需要 4 分钟。
为了找到给定二维网格中的岛屿数量,我们可以使用深度优先搜索(DFS)来解决这个问题。以下是详细的解决方案:
我们可以通过将每个网格中的'1'视为图中一个节点来看待问题。每个节点与其上下左右相邻的'1'节点通过边连接。我们的任务是找出连通的节点组成的岛屿数量,每个岛屿都是连通的区域,被水包围。
使用DFS的思路是:
= 0 && $grid[$i-1][$j] == '1' && !$visited[$i-1][$j]) { $visited[$i-1][$j] = true; dfs($i-1, $j, $grid, $visited); } // 下方向 if ($i + 1 < $rows && $grid[$i+1][$j] == '1' && !$visited[$i+1][$j]) { $visited[$i+1][$j] = true; dfs($i+1, $j, $grid, $visited); } // 左方向 if ($j - 1 >= 0 && $grid[$i][$j-1] == '1' && !$visited[$i][$j-1]) { $visited[$i][$j-1] = true; dfs($i, $j-1, $grid, $visited); } // 右方向 if ($j + 1 < $cols && $grid[$i][$j+1] == '1' && !$visited[$i][$j+1]) { $visited[$i][$j+1] = true; dfs($i, $j+1, $grid, $visited); }}return $islands;
$visited
数组来记录每个网格单元是否被访问过。初始化行数和列数,用于遍历网格。通过这种方法,我们可以有效地找到网格中的所有岛屿,并立即计数每个遍历的连通区域,从而得到最终的岛屿数量。
转载地址:http://ehgyk.baihongyu.com/