CF984B Minesweeper
题目描述
有一天,Alex 决定回忆童年,那时计算机性能还不强,很多人只能玩自带的游戏。那时 Alex 很喜欢玩扫雷。他总是幻想自己在拯救世界,阻止恐怖分子安放的炸弹,但他很少能赢。
现在 Alex 长大了,最难的关卡也能轻松获胜。这很快让他感到无聊,于是他想:如果小时候电脑给他的是无效的扫雷棋盘,是不是他才一直赢不了?
他需要你的帮助来检查棋盘的有效性。
一个扫雷棋盘是一个 $n \times m$ 的矩形,每个格子要么是空的,要么包含 $1$ 到 $8$ 的数字,要么是一个炸弹。棋盘是有效的当且仅当对于每个格子:
- 如果格子里有数字 $k$,那么恰好有 $k$ 个相邻格子里有炸弹。
- 如果格子是空的,那么所有相邻格子都不能有炸弹。
两个格子相邻当且仅当它们有公共边或公共角(即每个格子最多有 $8$ 个相邻格子)。
输入格式
第一行包含两个整数 $n$ 和 $m$($1 \le n, m \le 100$),表示棋盘的大小。
接下来的 $n$ 行描述棋盘的内容。每行包含 $m$ 个字符,每个字符为 “.”(表示空格)、“*”(表示有炸弹),或 $1$ 到 $8$ 的数字。
输出格式
如果棋盘有效,输出 “YES”;否则输出 “NO”。
你可以任意选择字母的大小写。
说明/提示
在第二个样例中,答案是 “NO”,因为如果炸弹的位置不变,第一行应该是 “*2*1”。
你可以在 维基百科的相关条目 了解更多关于扫雷的信息。
由 ChatGPT 4.1 翻译