隔断染病计时
BFS约 669 字大约 2 分钟
P5615. 隔断染病计时
场次:2026年10月10日-非AI方向 · 来源:CodeFun2000 P5615
题目描述
身为健康防护软件的编写者,要做的是把长方形屋子里病菌逐步蔓延的经过仿真出来。屋子被画成一张二维格子表,表中的格子只有下面三类:
表示尚未染病的人
表示已经染病的人
表示挡住去路的物体(例如隔板、墙体)
每一轮病菌只会迈进紧贴着的上、下、左、右格子,一轮过去记作 小时。请给出把所有还有机会染上的人全部染完所要的最少小时数。只要仍有人因为挡路物体被隔开、再也染不上,就输出 。
输入格式
首行是两个整数 和 ,依次为格子表的行数与列数,二者之间用一个空格分开。,。
随后恰好 行。每行是一串长度为 的字符,字符紧挨着书写、中间不留空格,从左到右给出该行每个格子:尚未染病写 ,已经染病写 ,挡路物体写 。
输出格式
输出一个整数,表示把还有机会染上的人全部染完所要的最少小时数。若仍有人被挡路物体隔开、始终染不上,则输出 。
示例
示例 1
输入:
3 4
0100
00x0
x010输出:
2说明:
为便于对照,下面把同一张表用空格拆开。正式输入里这些空格并不存在。
0 1 0 0
0 0 x 0
x 0 1 0开局已经染病的,是第 行第 格,以及第 行第 格。
- 第 小时:第 行第 格把左边、右边、下边三个人染上;第 行第 格把左边和右边两个人染上。它的正上方是挡路物体,过不去。
- 第 小时:还剩三个人,分别位于第 行最右、第 行最左、第 行最右,这一小时也被染上。
尚未染病的人已经没有,答案是 。
示例 2
输入:
3 3
0x0
x1x
00x输出:
-1说明:
0 x 0
x 1 x
0 0 x染病者只有正中间那一个。第 小时只能染到正下方那个人;第 小时再染到左下角。左上角的右边和下边都是挡路物体,右上角的左边和下边同样被挡住,病菌到不了这两处。因此输出 。