解题思路:可以看成一个点向八个方向的一次bfs
注意事项:重点是对扫雷地图的处理 int char的转换
参考代码:
import java.util.EnumSet;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int count=1;
while(in.hasNext()) {
int m=in.nextInt();
int n=in.nextInt();
if(m==0 && n==0) {
break;
}
char[][] leiqu=new char[m][n];
for (int i = 0; i < leiqu.length; i++) {
char[] input=in.next().toCharArray();
for(int j=0;j<input.length;j++) { //处理扫雷地图
if(input[j]!='*') {
leiqu[i][j]='0';
}
else {
leiqu[i][j]='*';
}
}
}
for (int i = 0; i < leiqu.length; i++) {
for (int j = 0; j < leiqu[0].length; j++) {
if(leiqu[i][j]=='0'){
leiqu[i][j]=(char) (count(leiqu, i, j)+'0');
}
}
}
//遍历输出
System.out.println("Field #"+count+":");
for (int i = 0; i < leiqu.length; i++) {
for (int j = 0; j < leiqu[0].length; j++) {
System.out.print(leiqu[i][j]);
}
System.out.println();
}
System.out.println();
count++;
}
}
public static int count(char[][] arr,int i,int j) {
//统计八个方向
int[][] dir=new int[][]{
{-1,0},{1,0},{0,1},{0,-1},{-1,-1},{-1,1},{1,-1},{1,1} //方向数组
};
int ct = 0;
for(int l=0;l<dir.length;l++) {
int m=i; //以i,j为中心 所以每次都要记得归位
int n=j;
m=m+dir[l][0];
n=n+dir[l][1];
if(m<0 || m>=arr.length || n<0 || n>=arr[0].length)continue;
if(arr[m][n]=='*')ct++;
}
return ct;
}
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复