当前位置: 面试刷题>> 岛屿的个数 (经典算法题500道)
### 题目描述补充
给定一个由 '1'(表示陆地)和 '0'(表示水域)组成的二维网格,计算网格中岛屿的个数。岛屿总是被水域包围,并且每块岛屿由连续的陆地单元格('1')组成,陆地单元格是上下左右四个方向相连的。
### 示例
假设有这样一个二维网格:
```
1 1 0 0 0
1 1 0 0 0
0 0 1 0 0
0 0 0 1 1
```
这个网格包含 3 个岛屿。
### PHP 示例代码
```php
function numIslands($grid) {
$rows = count($grid);
if ($rows == 0) return 0;
$cols = count($grid[0]);
$count = 0;
for ($i = 0; $i < $rows; $i++) {
for ($j = 0; $j < $cols; $j++) {
if ($grid[$i][$j] == '1') {
dfs($grid, $i, $j);
$count++;
}
}
}
return $count;
}
function dfs(&$grid, $i, $j) {
$rows = count($grid);
$cols = count($grid[0]);
if ($i < 0 || $i >= $rows || $j < 0 || $j >= $cols || $grid[$i][$j] != '1') {
return;
}
$grid[$i][$j] = '0'; // 标记当前陆地已访问
dfs($grid, $i + 1, $j); // 向下
dfs($grid, $i - 1, $j); // 向上
dfs($grid, $i, $j + 1); // 向右
dfs($grid, $i, $j - 1); // 向左
}
// 示例用法
$grid = [
['1', '1', '0', '0', '0'],
['1', '1', '0', '0', '0'],
['0', '0', '1', '0', '0'],
['0', '0', '0', '1', '1']
];
echo numIslands($grid); // 输出: 3
```
### Python 示例代码
```python
def numIslands(grid):
if not grid:
return 0
rows, cols = len(grid), len(grid[0])
count = 0
for i in range(rows):
for j in range(cols):
if grid[i][j] == '1':
dfs(grid, i, j)
count += 1
return count
def dfs(grid, i, j):
rows, cols = len(grid), len(grid[0])
if i < 0 or i >= rows or j < 0 or j >= cols or grid[i][j] != '1':
return
grid[i][j] = '0' # 标记为已访问
dfs(grid, i + 1, j) # 向下
dfs(grid, i - 1, j) # 向上
dfs(grid, i, j + 1) # 向右
dfs(grid, i, j - 1) # 向左
# 示例用法
grid = [
['1', '1', '0', '0', '0'],
['1', '1', '0', '0', '0'],
['0', '0', '1', '0', '0'],
['0', '0', '0', '1', '1']
]
print(numIslands(grid)) # 输出: 3
```
### JavaScript 示例代码
```javascript
function numIslands(grid) {
if (!grid.length) return 0;
let rows = grid.length;
let cols = grid[0].length;
let count = 0;
const dfs = (i, j) => {
if (i < 0 || i >= rows || j < 0 || j >= cols || grid[i][j] !== '1') {
return;
}
grid[i][j] = '0'; // 标记为已访问
dfs(i + 1, j); // 向下
dfs(i - 1, j); // 向上
dfs(i, j + 1); // 向右
dfs(i, j - 1); // 向左
};
for (let i = 0; i < rows; i++) {
for (let j = 0; j < cols; j++) {
if (grid[i][j] === '1') {
dfs(i, j);
count++;
}
}
}
return count;
}
// 示例用法
const grid = [
['1', '1', '0', '0', '0'],
['1', '1', '0', '0', '0'],
['0', '0', '1', '0', '0'],
['0', '0', '0', '1', '1']
];
console.log(numIslands(grid)); // 输出: 3
// 码小课网站中有更多相关内容分享给大家学习
```