UVA 10189   C - MINES p

来源:互联网 发布:mac mail qq企业邮箱 编辑:程序博客网 时间:2024/04/29 22:30
C - MINES p 
Time Limit: 3000MS  Memory Limit: Unknown   64bitIO Format: %lld & %llu  

[Submit]   [GoBack]   [Status] 

Description



 Problem B: Minesweeper 


The Problem
Have you ever played Minesweeper? It's a cute little gamewhich comes within a certain Operating System which name we can'treally remember. Well, the goal of the game is to find where areall the mines within a MxN field. To help you, the game shows anumber in a square which tells you how many mines there areadjacent to that square. For instance, supose the following 4x4field with 2 mines (which are represented by an *character): 

*...
....
.*..
....
If we would represent the same field placing the hint numbersdescribed above, we would end up with: 
*100
2210
1*10
1110
As you may have already noticed, each square may have at most8 adjacent squares. 
The Input
The input will consist of an arbitrary number of fields. Thefirst line of each field contains two integers n and m (0< n,m <= 100) which stands for thenumber of lines and columns of the field respectively. The next nlines contains exactly m characters and represent the field. Eachsafe square is represented by an "." character (without the quotes)and each mine square is represented by an "*" character (alsowithout the quotes). The first field line where n = m = 0represents the end of input and should not beprocessed. 

The Output
For each field, you must print the following message in a linealone: 

Field #x:Where x stands for the number of the field (startingfrom 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 fieldoutputs. 
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 Warmup2001. 
Input

Output

Sample Input

Sample Output

Hint

[Submit]   [Go Back]  [Status] 
这题其实挺简单的,但是就是一个空行的位置让我纠结了半天也没过,注意啊注意
代码:
#include<stdio.h>
#include<string.h>
int main()
{
char map[202][202];
intnum[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;
}