解题思路:
思路其实很简单,就是每遇到一个安全区域'.',就扫描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 人评分
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:827 |
字符串比较 (C语言代码)答案错误????浏览:641 |
Tom数 (C语言代码)浏览:517 |
C二级辅导-进制转换 (C语言代码)浏览:750 |
Tom数 (C语言代码)浏览:598 |
计算质因子 (C语言代码)浏览:778 |
敲七 (C++代码)浏览:1119 |
【计算直线的交点数】 (C语言代码)浏览:986 |
C语言程序设计教程(第三版)课后习题8.9 (C语言代码)浏览:577 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:871 |