解题思路:
思路其实很简单,就是每遇到一个安全区域'.',就扫描8个方向,遇到地雷'*',该安全位置就加一。
参考代码:
import java.util.Scanner;
/**
* @author JohnnyLin
* @version Creation Time:2020年8月5日 下午3:40:47
*/
public class Main {
private static char[][]map;
private static int cnt;
//八个方向
private static int [][]dir= {{-1,0},{-1,-1},{0,-1},{1,-1},{1,0},{1,1},{0,1},{-1,1}};
private static int n,m;
//打印时要注意 由于map是char类型,加一是在ASCII值得基础上加的 而'.'的值为46因此要减去46再打印
public static void show(char a[][]) {
for (int i = 0; i<n; i++) {
for (int j = 0; j < m; j++) {
if(map[i][j]=='*')
System.out.print(map[i][j]);
else
System.out.print(map[i][j]-46);
}
System.out.println();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
/*char值对应的ASCII值
System.out.println((int)'*');//42
System.out.println((int)'0');//48
System.out.println((int)'1');//49
System.out.println((int)('*'+'1'));//91
System.out.println(('*'+1));//43
System.out.println((int)('*'+1));//43
System.out.println((int)'.');//46
*/
Scanner reader =new Scanner(System.in);
n=reader.nextInt();
m=reader.nextInt();
while(n!=0&&m!=0) {
map=new char[n][m];
cnt++;
for (int i = 0; i < n; i++) {
String s=reader.next();
for (int j = 0; j < m; j++) {
map[i][j]=s.trim().charAt(j);
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if(map[i][j]=='.') {
dfs(i,j);
}
}
}
System.out.println("Field"+" #"+cnt+":");
show(map);
n=reader.nextInt();
m=reader.nextInt();
System.out.println();
}
}
private static void dfs(int x, int y) {
for(int i=0;i<8;i++) {
int nx=x+dir[i][0];
int ny=y+dir[i][1];
if(nx>=0&&nx
0.0分
0 人评分