AlgoMooc
← 返回题库

P3702. 火星改造

中等通过率 53% · 提交 899 · 通过 475
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

看不懂题目?点开图解(训练营专属)

登录后查看题目图解

题目图解为训练营学员专属内容,请先登录。

微信扫码登录还不是训练营学员?了解训练营 →
写完代码点「提交」,将对全部测试用例判题。