C - MINES p
Time Limit: 3000MS
Memory Limit: Unknown 64bit
IO Format: %lld & %llu
[Submit] [Go
Back] [Status]
Description
The Problem
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 MxN 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 4x4
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
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.
The Output
For each field, you must print the following message in a line
alone:
Field #x: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 adjacent mines 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
--------------------------------------------------------------------------------
? 2001 Universidade do Brasil (UFRJ). Internal Contest Warmup
2001.
Input
Output
Sample Input
Sample Output
Hint
[Submit] [Go Back]
[Status]
这题其实挺简单的,但是就是一个空行的位置让我纠结了半天也没过,注意啊注意
代码:
#include<stdio.h>
#include<string.h>
int main()
{
char map[202][202];
int
num[202][202],k,s,kx,ky,i,j,m,n,sum=0,flag[8][2]={-1,-1,-1,0,-1,1,0,-1,0,1,1,-1,1,0,1,1};
scanf("%d%d",&m,&n);
if(m==0&&n==0)return 0;
while(1)
{
sum++;
memset(num,0,sizeof(num));
for(i=0;i<m;i++)
scanf("%s",map[i]);
printf("Field #%d:\n",sum);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
if(map[i][j]=='*')
printf("*");
else{
s=0;
for(k=0;k<8;k++)
{
kx=i+flag[k][0];
ky=j+flag[k][1];
if(kx>=0&&kx<m&&ky>=0&&ky<n&&map[kx][ky]=='*')
s++;
}
printf("%d",s);
}
printf("\n");
}
scanf("%d%d",&m,&n);
if(m==0&&n==0)
break;
else printf("\n");
}
return 0;
}