解题思路:
思路其实很简单,就是每遇到一个安全区域'.',就扫描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语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复