扫雷(Minesweeper)是一种流行的益智游戏,您必须在不单击这些图块的情况下发现哪些图块是“地雷”。而是单击附近的图块以显示相邻地雷的数量。该游戏的一个缺点是,有可能最终导致存在多个有效答案而您只能猜测的情况。例如,使用以下面板:
1110
2*31
3*??
2*4?
112?
在此格式中,数字代表相邻地雷的数量,an *
代表已知地雷,“?” 代表潜在的地雷。关于这个特殊难题的不幸之处在于,存在四个不同且有效的潜在解决方案:
1110 1110 1110 1110
2*31 2*31 2*31 2*31
3*4* 3*5* 3**2 3**1
2*42 2*4* 2*4* 2*42
112* 1121 1121 112*
这意味着董事会是无法解决的。这是可解决的板的示例:
1121
1??*
12?*
0122
该板是可解决的,因为只有一种可能的有效解决方案:
1121
1*4*
12**
0122
您的任务是编写一个程序或函数,该程序或函数需要一个有效的扫雷器板并确定其是否可解决。“有效扫雷板”是指输入将始终为矩形,具有至少一种解决方案,并且不包含任何无效字符。
您的输入可能是字符数组,字符串数组,包含换行符的字符串等。如果输出可解决,则输出必须为真实值,否则为错误值。我并不十分担心性能,但是理论上您的解决方案必须适用于任何大小的输入。
像往常一样,存在标准漏洞,而最短的解决方案以字节为单位!
例子:
以下示例都是可解决的:
1121
1??*
12?*
0122
1110
1???
1110
0000
1110
3???
??20
*310
****
****
****
****
0000
0000
0000
0000
1100
*100
2321
??*2
13*2
1221
1*10
1110
1121
2*??
2*31
2220
1*10
以下示例都是无法解决的:
1110
2*31
3*??
2*4?
112?
01??11*211
12??2323*1
1*33*2*210
12?2122321
13?3101**1
1***101221
1***
3*52
2*31
12??
02??
01??
00000111
000012*1
00001*21
22101110
**100111
?31123*1
?311**31
**113*20
2?
没有解决方案,这意味着它不能来自实际的Minesweeper游戏。因此,它不被视为“ Minesweeper棋盘” ...是吗?)