2346. 岛屿面积
1000ms
256MB
简单
广度优先搜索
BFS
题目描述
Nical 降落到了一个大小为 $n \times m$ 的网格游戏地图中,降落点坐标为 $(sx, sy)$。
地图中,数字 `1` 表示陆地,数字 `0` 表示海水。所有上下左右相邻的 `1` 连通块组成一个岛屿。
已知 Nical 的降落点一定是陆地。请编写程序,计算 Nical 所在岛屿的面积(即该连通块中 `1` 的个数)。
假设地图边界以外的区域全部为海水。
输入格式
- 第一行包含四个正整数 $n, m, sx, sy$ ($1 < n, m \le 50, \quad 1 \le sx \le n, \quad 1 \le sy \le m$)。
- 接下来 $n$ 行,每行包含 $m$ 个以空格隔开的整数(`0` 或 `1`),代表地图。
输出格式
- 输出一个整数,表示 Nical 所在的岛屿面积。
样例 1
输入 (Input)
6 6 3 4 0 1 0 1 1 0 0 0 0 1 1 1 1 0 1 1 0 1 0 0 0 1 0 0 0 1 1 1 1 0 0 0 0 0 0 0
输出 (Output)
13
- $1 < n, m \le 50$。
- 输入的坐标 $(sx, sy)$ 是从 1 开始计数的(1-indexed)。
- **算法提示**:
这是一个经典的**连通块面积计算**问题,可使用深度优先搜索(DFS)或广度优先搜索(BFS)解决:
1. 将输入的 1-indexed 坐标 $(sx, sy)$ 转换为 0-indexed 的数组下标 $(sx-1, sy-1)$。
2. 从该降落点出发,利用 DFS 或 BFS 向上下左右四个方向扩散。
3. 累计遍历到的陆地 `1` 的个数,并将遍历过的格子标记为已访问(或直接修改为 `0`),防止重复计算。
› 输入 stdin
CtrlShiftEnter
‹ 输出 stdout
错误 stderr
操作成功