#P16486. [GKS 2014 #C] Minesweeper

[GKS 2014 #C] Minesweeper

题目描述

扫雷是一款在 20 世纪 80 年代流行起来的电脑游戏,至今仍被某些版本的 Microsoft Windows 操作系统收录。本题与扫雷有相似的思路,但并不假设你玩过扫雷。

在本题中,你正在一个由相同格子组成的网格上进行游戏。每个格子的内容最初是隐藏的。网格中有 MM 枚地雷,分别隐藏在 MM 个不同的格子中。其他格子均不含雷。你可以点击任意格子将其翻开。如果翻开的格子含有地雷,游戏立即结束,你输了。否则,翻开的格子会显示一个介于 0088 之间(含两端)的数字,该数字表示其周围相邻格子中含有地雷的个数。如果两个格子共享一个角或一条边,则称它们相邻。此外,如果翻开的格子显示为 00,那么该格子所有相邻的格子也会被自动翻开,这一过程会递归进行。当所有不含地雷的格子都被翻开后,游戏结束,你获胜。

例如,一个初始的棋盘配置可能如下所示(* 代表地雷,c 是第一个被点击的格子):

*..*...**.
....*.....
..c..*....
........*.
..........

被点击的格子周围没有地雷,因此它翻开后显示 00,并且它周围的 88 个相邻格子也会被翻开。这一过程持续进行,最终得到如下棋盘:

*..*...**.
1112*.....
00012*....
00001111*.
00000001..

此时,仍有一些不含雷的格子未被翻开(用 . 字符表示),因此玩家必须再次点击以继续游戏。

你希望尽快赢得游戏,因此想要求出赢得游戏所需的最少点击次数。给定棋盘的大小(N×NN \times N),请输出这一最少点击次数。

输入格式

第一行给出测试用例的数量 TT。接下来是 TT 个测试用例。每个测试用例的第一行包含一个整数 NN。随后 NN 行,每行是一个长度为 NN 的字符串,由 *. 组成,表示扫雷游戏的初始棋盘。

输出格式

对于每个测试用例,输出一行形如 Case #x: y 的内容,其中 xx 是测试用例编号(从 11 开始),yy 是赢得游戏所需的最少点击次数。

2
3
..*
..*
**.
5
..*..
..*..
.*..*
.*...
.*...
Case #1: 2
Case #2: 8

提示

限制

1T1001 \le T \le 100

小数据集(测试集 1 - 可见)

1N501 \le N \le 50

大数据集(测试集 2 - 隐藏)

1N3001 \le N \le 300

翻译由 DeepSeek V4 Pro 完成