解题思路:可以看成一个点向八个方向的一次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语言程序设计教程(第三版)课后习题6.5 (Java代码)浏览:1122 |
校门外的树 (C语言代码)浏览:716 |
C语言程序设计教程(第三版)课后习题9.8 (Java代码)浏览:1640 |
【亲和数】 (C语言代码)浏览:495 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:549 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:639 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:916 |
The 3n + 1 problem (C语言代码)浏览:553 |
母牛的故事 (C语言代码)浏览:944 |
分糖果 (C语言代码)浏览:920 |