题目
扫雷是Windows自带的游戏。游戏的目标是尽快找到雷区中的所有地雷,而不许踩到地雷。如果方块上的是地雷,将输掉游戏。
如果方块上出现数字,则表示在其周围的八个方块中共有多少颗地雷。
你的任务是在已知地雷出现位置的情况下,得到各个方块中的数据。
输入描述:
输入有多组数据,每组数据的第一行有两个数字,m, n (0 < m, n< 100)表示游戏中雷区的范围为m×n。接下来m行每行有n个字符。*表示有地雷,.表示无地雷。最后一组数据m = 0, n = 0表示输入结束,不需要处理。
输出描述:
对于每组输入数据,输出结果,各方块数字间不留空格。地雷位置用*表示。
每组结果之后有一个空行。
示例 :
输入:
2 3
***
...
4 4
*...
....
.*..
....
0 0
输出:
***
232
*100
2210
1*10
1110
思路 :
采用模拟法。
在输入数组时即检测当前格子是否有地雷。如果有地雷,当前格子即为 *
。 如果当前格子不是地雷,遍历周围八个格子,使其数目加一。
在加一的过程中,应当注意,如果当前格子有地雷,应该跳过。
细节 :
1 . 内层循环中判断小于0的if语句不能写在for循环的第二个参数中。 这两中写法是有区别的。
解法 :
#include <bits/stdc++.h>
#include <vector>
using namespace std