PC/UVa IDs: 110102/10189, Popularity: A, Success rate: high Level: 1
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 × 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×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
Input
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 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.
Output
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.
Sample Input
4 4
*...
....
.*..
....
3 5
**...
.....
.*...
0 0
Sample Output
Field #1:
*100
2210
1*10
1110
Field #2:
**100
33200
1*100
********************************************************************************//using namespace System;
using namespace std;
int main()
{
int i=4, j = 4, count = 0,h=0,l=0,fieldNum=1;
int p [100];
// input matrix
char mS[100][100];
FILE *input;
input = fopen("input.txt","w");
while(cin>>i>>j &&(i !=0 && j !=0))
{
// output matrix
int ms2 [100][100];
//fprintf(input,
//gereftan vooroodi
for (int h = 0; h < i; h++)
{
for (int l = 0; l < j; l++)
{
cin>>mS[h][l];
ms2[h][l]=0;
}
}
// print output
//cout<<"Field #"<<fieldNum<<":"<<endl;
if (fieldNum == 1)
fprintf(input,"Field #%d:",fieldNum);
else
fprintf(input,"\n\nField #%d:",fieldNum);
for (int n = 0; n < i; n++)
{
for (int m = 0; m < j; m++)
{
if (mS[n][m] == '*')
{
ms2[n][m] = 9;
if(mS[n+1][m+1]!='*'&& n+1<i && m+1<j )
ms2[n+1][m+1]++;
if(mS[n+1][m]!='*'&&n+1<i )
ms2[n+1][m]++;
if(mS[n][m+1]!='*'&& m+1<j)
ms2[n][m+1]++;
if(mS[n-1][m-1]!='*'&&n-1>=0 && m-1>=0)
ms2[n-1][m-1]++;
if(mS[n-1][m]!='*'&& n-1>=0)
ms2[n-1][m]++;
if(mS[n][m-1]!='*'&& m-1>=0)
ms2[n][m-1]++;
if(mS[n+1][m-1]!='*'&&n+1<i && m-1>=0)
ms2[n+1][m-1]++;
if(mS[n-1][m+1]!='*'&& m+1<j && n-1>=0)
ms2[n-1][m+1]++;
}
}
//}
}
for (int n = 0; n < i; n++)
{
fprintf(input,"\n");
for (int m = 0; m < j; m++)
{
if(ms2[n][m]==9)
//cout<<'*';
fprintf(input,"*");
else
{
int i;
i=ms2[n][m];
//cout<<i;
fprintf(input,"%d",i);
}
}
}
//cout<<endl;
//fprintf(input,"\n");
fieldNum++;
}
fclose(input);
input = fopen("input.txt","r");
if (input == NULL)
{
int z=0;
int x =5/z;
printf("\nCan not open log output file, exiting...");
exit(1);
}
char c;
while (!feof(input))
{
c = fgetc(input);
if (feof(input))
break;
else
cout<<c;
}
fclose(input);
return 0;
}