一、题目描述
二、题解
1.解题思路与方法
标准暴力做法是直接使用二维数组map[ ][ ]存储输入,通过DFS遍历map[ ][ ]判断并将结果单独存入另一个二维数组ans[ ][ ]。判断有两种方法,一种是遇到地雷时,将周围计数++,另一种是每到一个格,,检查周围是否有地雷,有则加上对应数量。
由于输入和答案不在同一个数组中处理,不妨考虑在输入的同时进行判断并计数即可,输出时根据输入的map[ ][ ]数组判断,若是地雷则输出“ * ”,否则输出ans[ ][ ]数组的对应值。
2.code
注意接收输入时,nextInt()后需要接收换行符再接收数据。
import java.util.*;
public class Main {
public static char[][] map;
public static int[][] ans;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); //行
int m = sc.nextInt(); //列
String space = sc.nextLine(); //接收换行符
map = new char[n+2][m+2];
ans = new int[n+2][m+2];
for(int i=1;i<n+1;i++){
char[] arr = sc.nextLine().toCharArray();
for(int j=1;j<m+1;j++){
map[i][j] = arr[j-1];
if(arr[j-1]=='*'){ //如果是地雷,周围一圈计数+1
ans[i-1][j-1]++;
ans[i-1][j]++;
ans[i-1][j+1]++;
ans[i][j-1]++;
ans[i][j+1]++;
ans[i+1][j-1]++;
ans[i+1][j]++;
ans[i+1][j+1]++;
}
}
}
for(int i=1;i<n+1;i++){
for(int j=1;j<m+1;j++){
if(map[i][j]=='*'){ //判断并输出
System.out.print("*");
}else{
System.out.print(ans[i][j]);
}
}
System.out.println();
}
sc.close();
}
}