题目描述
Minesweeper Have 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 110 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
110
1110
Field #2:
**100
33200
1*100
#include<iostream>
using namespace std;
int main(){
int a,b;
int feild=0;
while(cin>>a>>b&&a!=0){
feild++;
char ans[a+1][b+1];
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
cin>>ans[i][j];
}
}
cout<<"Field #"<<feild<<":"<<endl;
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
if(ans[i][j]=='*')
cout<<"*";
else{
int total=0;
//由i决定行起点终点 由j决定列起点终点
int rowb,rowe;
int colb,cole;
i-1>=1?rowb=i-1:rowb=i;
i+1<=a?rowe=i+1:rowe=i;
j-1>=1?colb=j-1:colb=j;
j+1<=b?cole=j+1:colb=j;
for(int m=rowb;m<=rowe;m++){
for(int n=colb;n<=cole;n++){
if(ans[m][n]=='*')
total++;
}
}
cout<<total;
}
}
cout<<endl;
}
cout<<endl;
}
return 0;
}