题目描述
Minesweeper ave you ever played Minesweeper? This cute little game comes with a certain operating system whose name we can't remember. The goal of the game is to find where all the mines are located within a M x N field. The game shows a number in a square which tells you how many mines there are adjacent to that square. Each square has at most eight adjacent squares. The 4 x 4 field on the left contains two mines, each represented by a ``*'' character. If we represent the same field by the hint numbers described above, we end up with the field on the right: *... .... .*.. .... *100 2210 1*10 1110
输入
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$ le$100) which stand for the number of lines and columns of the field, respectively. Each of the next n lines contains exactly m characters, representing the field. Safe squares are denoted by ``.'' and mine squares by ``*,'' both without the quotes. The first field line where n = m = 0 represents the end of input and should not be processed.
输出
For each field, print the message Field #x: on a line alone, where x stands for the number of the field starting from 1. The next n lines should contain the field with the ``.'' characters replaced by the number of mines adjacent to that square. There must be an empty line between field outputs.
样例输入
4 4 *... .... .*.. .... 3 5 **... ..... .*... 0 0
样例输出
Field #1: *100 2210 1*10 1110 Field #2: **100 33200 1*100
#include <iostream> #include <cstring> using namespace std; int dir[8][2] = {{-1,0},{0,1},{1,0},{0,-1},{-1,-1},{-1,1},{1,1},{1,-1}}; int main() { int num = 1; int m,n; cin>>m>>n; while(m != 0 && n != 0) { char data[m][n]; int a[m][n]; for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) cin>>data[i][j]; memset(a,0,sizeof(a)); int m1 = m-1; int n1 = n-1; while(m1 != 0 || n1 != 0) { if(data[m1][n1] != '*') { for(int i = 0; i<8; i++) { int x = m1+dir[i][0]; int y = n1+dir[i][1]; if( x > -1 && y > -1 && y < n && x < m) { if(data[x][y] == '*' && data[m1][n1] == '.') a[m1][n1]++; } } } if(n1-1 != -1) n1--; else { n1 = n-1; m1--; } } cout<<"Field #"<<num<<":"<<endl; for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) { if(data[i][j] == '*') cout<<"*"; else cout<<a[i][j]; } cout<<endl; } cout<<endl; num++; cin>>m>>n; } return 0; }