AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

P3702. 火星改造

中等通过率 53% · 提交 895 · 通过 472
BFS队列图论模拟

小慕正在参与一个火星大气改造项目。改造区域被划分为 row × column 的网格,每个网格的状态有三种,分别用 YES、NO、NA 表示: - YES 表示该网格已经是; - NO 表示该网格尚未改造,但未来可以改造; - NA 表示,无法改造成宜居区,也不能穿过。 初始状态下,区域内可能存在多个宜居区。每个,每个宜居区会同时向上下左右四个方向扩散,将相邻的 NO 网格自动改造成新的宜居区。 小慕需要判断:经过若干太阳日后,是否所有(即 NO 网格)都能变成宜居区。如果可以,请返回所需的最少太阳日天数;如果无法全部改造,则返回 -1。

提示:带虚线的词点一下有通俗解释。

输入描述

输入 row * column 个网格数据,每个网格值枚举值如下:YES,NO,NA; 样例: ``` YES YES NO NO NO NO NA NO YES ```

输出描述

可改造区是否能全部变成宜居区,如果可以,则返回改造的太阳日天数,不可以则返回-1。

示例

示例 1

输入

YES YES NO
NO NO NO
YES NO NO

输出

2

说明:经过 2 个太阳日,完成宜居改造。

示例 2

输入

YES NO NO NO
NO NO NO NO
NO NO NO NO
NO NO NO NO

输出

6

说明:经过 6 个太阳日,可完成改造

示例 3

输入

NO NA

输出

-1

说明:无改造初始条件,无法进行改造

示例 4

输入

YES NO NO YES
NO NO YES NO
NO YES NA NA
YES NO NA NO

输出

-1

说明:输出-1。右下角的区域,被周边三个死亡区挡住,无法实现改造。

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
BFS扩散过程示例(3x3网格) 初始状态 YES YES NO NO NO NO NA NO YES 第1天扩散 YES YES YES YES NO NO NA NO YES YES(宜居区) NO(可改造区) NA(死亡区) 新改造 宜居区(YES)每天向上下左右扩散一格,将相邻的NO变成YES,直到所有NO被覆盖或无法扩散。
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「火星改造」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。