题目描述
扫雷你玩过扫雷吗?这个可爱的小游戏带有一定的操作系统,我们不记得它的名字。游戏的目标是找到所有地雷在M x N字段中的位置。游戏在一个正方形中显示一个数字,告诉您该正方形附近有多少个地雷。每个方格最多具有八个相邻方格。左侧的4 x 4字段包含两个地雷,每个地雷由一个*''字符表示。如果我们通过上述提示号表示同一字段,那么我们将在右侧显示该字段:* ... ....。* .. .... * 100 2210 1 * 10 1110 输入 输入将包含任意数量的字段。每个字段的第一行包含两个整数n和m(0 <n,m $ \ le $ 100),分别代表该字段的行数和列数。接下来的n行中的每行都包含正好是该字段的m个字符。安全方块以
。’‘表示,矿用方块以*''表示,两者均不带引号。n = m = 0的第一条字段行表示输入的结尾,不应进行处理。 输出 对于每个字段,仅在一行上显示消息“字段#x:”,其中x代表从1开始的字段编号。接下来的n行应包含用
。’'字符替换为数字的字段。那个广场附近的地雷。字段输出之间必须有一个空行。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int jl=1;
Scanner sr = new Scanner(System.in);
for(;;)
{
int n=sr.nextInt();
int m=sr.nextInt();
if(n==m&&n==0)
{
break;
}
int sz[][]=new int [n][m];
for(int a=0;a<n;a++)
{
int d=0;
String zf=sr.next();
for(int e=0;e<zf.length();e++)
{
if(zf.charAt(e)=='*')
{
d=e;
sz[a][d]=1000;
if(a>0&&d>0)
{
sz[a-1][d-1]+=1;
}
if(a>0)
{
sz[a-1][d]+=1;
}
if(d>0)
{
sz[a][d-1]+=1;
}
if(a<n-1&&d<m-1)
{
sz[a+1][d+1]+=1;
}
if(a<n-1)
{
sz[a+1][d]+=1;
}
if(d<m-1)
{
sz[a][d+1]+=1;
}
if(a>0&&d<m-1)
{
sz[a-1][d+1]+=1;
}
if(a<n-1&&d>0)
{
sz[a+1][d-1]+=1;
}
}
}
}
System.out.println("Field #"+jl+":");
jl++;
for(int a=0;a<n;a++)
{
for(int d=0;d<m;d++)
{
if(sz[a][d]>=1000)
{
System.out.print("*");
}
else
{
System.out.print(sz[a][d]);
}
}
System.out.println();
}
System.out.println();
}
}
}