每周一题之2 Mineweep(扫雷)
Minesweeper (扫雷)
PC/UVa IDs: 110102/10189,
Popularity: A,
Success rate: high Level: 1
测试地址:https://vjudge.net/problem/UVA-10189
[问题描述]
Have you ever played Minesweeper? It’s a cute little game which comes within a certain Operating
System which name we can’t really remember. Well, the goal of the game is to find where are all the mines within a M × N field. To help you, the game shows a number in a square which tells you how many mines there are adjacent to that square. For instance, supose the following 4 × 4 field with 2 mines (which are represented by an ‘*’ character):
*...
....
.*..
....
If we would represent the same field placing the hint numbers described above, we would end up
with:
*100
2210
1*10
1110
As you may have already noticed, each square may have at most 8 adjacent squares.
[输入]
The input will consist of an arbitrary number of fields. The first line of each field contains two integers
n and m (0 < n, m ≤ 100) which stands for the number of lines and columns of the field respectively.
The next n lines contains exactly m characters and represent the field.
Each safe square is represented by an ‘.’ character (without the quotes) and each mine square
is represented by an ‘*’ character (also without the quotes). The first field line where n = m = 0
represents the end of input and should not be processed.
[输出]
对于每对整数 i 和 j,按原来的顺序输出 i 和 j,然后输出二者之间的整数中的最大循环节长度。这三个整数应该用单个空格隔开,且在同一行输出。对于读入的每一组数据,在输出中应位于单独的一行。
[样例输入]
4 4
*...
....
.*..
....
3 5
**...
.....
.*...
0 0
[样例输出]
Field #1:
*100
2210
1*10
1110
Field #2:
**100
33200
1*100
*/
每周一题解析:
#include "stdafx.h"
#include<iostream>
#include <string>
#include<queue>
#include<algorithm>
using namespace std;
int m, n;//N为行数,M为列数
int C = 1;//次数
char map[102][102];//扫雷地图
int b[101][101] = { 0 };
int main()
{
while (cin>>n>>m)
{
if (m == 0 || n == 0)
{
C++;
continue;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
{
cin >> map[i][j];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (map[i][j] == '.')
{
if (map[i - 1][j] == '*') {
b[i][j]++;
}
if (map[i + 1][j] == '*') {
b[i][j]++;
}
if (map[i - 1][j-1] == '*') {
b[i][j]++;
}
if (map[i - 1][j+1] == '*') {
b[i][j]++;
}
if (map[i + 1][j-1] == '*') {
b[i][j]++;
}
if (map[i + 1][j+1] == '*') {
b[i][j]++;
}
if (map[i ][j-1] == '*') {
b[i][j]++;
}if (map[i ][j+1] == '*') {
b[i][j]++;
}
map[i][j] = b[i][j] + '0';
}
else
{
continue;
}
}
}
cout << "Filed #" << C << endl;
C++;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << map[i][j] ;
}
cout << endl;
}
cout << endl;
}
return 0;
}