2364. 疾病预防系统

1000ms 256MB 简单 深度优先搜索 DFS
题目描述
某国新研发了一套疾病预防系统。当传染病爆发时,监测系统会将各区域的感染情况反应在系统中,并形成一个 $n \times m$ 的矩形阵列。 - 矩阵由数字 `0` 和 `1` 组成。 - `1` 代表该位置为感染居民。 - `0` 代表该位置为健康居民。 一个“感染区域”(连通块)定义为在**上下左右**四个方向上相邻的感染居民(值为 `1`)所构成的连通区域。请计算并输出该矩阵中感染区域的总个数。
输入格式
- 第一行包含两个正整数 $n$ 和 $m$ ($0 < n, m \le 100$),分别表示矩阵的行数和列数。 - 接下来 $n$ 行,每行包含 $m$ 个以空格隔开的整数(`0` 或 `1`),表示当前各位置的居民状态。
输出格式
- 输出一行一个整数,表示矩阵中感染区域的个数。
样例 1
输入 (Input)
5 6
0 1 0 1 0 1
0 1 0 1 1 1
0 1 1 0 0 1
1 0 0 0 0 0
1 0 0 1 0 0
输出 (Output)
4
样例说明
- **样例说明**: 在 $5 \times 6$ 的矩阵中,共有 4 个独立的 `1` 连通块(即感染区域): - 第 1 个区域包含:(0,1), (1,1), (2,1), (2,2) - 第 2 个区域包含:(0,3), (1,3), (1,4), (1,5), (2,5) - 第 3 个区域包含:(0,5) (注意它与上面的区域连通,已合并为第 2 个区域的一部分,此处独立区域仅为样例中的物理连通) - 第 4 个区域包含:(3,0), (4,0) - 第 5 个区域包含:(4,3) - 合计共有 4 个独立的连通区域。
- 对于 $100\%$ 的数据:$0 < n, m \le 100$。 - **算法提示**: 这是一个经典的求**二维网格图连通分量个数**的问题,可以使用**深度优先搜索(DFS)**或**广度优先搜索(BFS)**解决: 1. 遍历 $n \times m$ 矩阵中的每一个点,当遇到一个值为 `1` 且未被访问过的点时,感染区域数量加 1。 2. 从该点出发进行 DFS/BFS,沿着上下左右四个方向扩散,将所有与其相连通的 `1` 都标记为已访问(也可以直接将其修改为 `0` 以省去 `visited` 数组空间)。 3. 重复以上步骤,直到遍历完整个矩阵。
自测终端 stdin → stdout
输入 stdin
CtrlShiftEnter
输出 stdout

                
错误 stderr

                
CtrlEnter提交
自动保存已开启
操作成功
wzs_oj@kernel:~ — wzs-sh
guest@wzsoj:~$
刷新页面 F5
复制 Ctrl+C
粘贴 Ctrl+V
搜索题目
站点公告
今日神谕
CSP 倒计时
排行榜
我的提交
Esc 关闭 Enter 跳转 支持模糊匹配数字