CF984B.Minesweeper

传统题 时间 2000 ms 内存 256 MiB 5 尝试 1 已通过 1 标签

Minesweeper

题目描述

有一天,Alex 决定回忆童年,那时计算机性能还不强,很多人只能玩自带的游戏。那时 Alex 很喜欢玩扫雷。他总是幻想自己在拯救世界,阻止恐怖分子安放的炸弹,但他很少能赢。

现在 Alex 长大了,最难的关卡也能轻松获胜。这很快让他感到无聊,于是他想:如果小时候电脑给他的是无效的扫雷棋盘,是不是他才一直赢不了?

他需要你的帮助来检查棋盘的有效性。

一个扫雷棋盘是一个 n×mn \times m 的矩形,每个格子要么是空的,要么包含 1188 的数字,要么是一个炸弹。棋盘是有效的当且仅当对于每个格子:

  • 如果格子里有数字 kk,那么恰好有 kk 个相邻格子里有炸弹。
  • 如果格子是空的,那么所有相邻格子都不能有炸弹。

两个格子相邻当且仅当它们有公共边或公共角(即每个格子最多有 88 个相邻格子)。

输入格式

第一行包含两个整数 nnmm1n,m1001 \le n, m \le 100),表示棋盘的大小。

接下来的 nn 行描述棋盘的内容。每行包含 mm 个字符,每个字符为 “.”(表示空格)、“*”(表示有炸弹),或 1188 的数字。

输出格式

如果棋盘有效,输出 “YES”;否则输出 “NO”。

你可以任意选择字母的大小写。

说明/提示

在第二个样例中,答案是 “NO”,因为如果炸弹的位置不变,第一行应该是 “21”。

你可以在 维基百科的相关条目 了解更多关于扫雷的信息。

由 ChatGPT 4.1 翻译

样例

3 3
111
1*1
111
YES
2 4
*.*.
1211
NO

在线编程 IDE

建议全屏模式获得最佳体验