答案需要核对一下
package com.company;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileInputStream;
/**
meng3.wei 2020.04.15
3
3 3
000
011
011
33
010
121
010
55
00000
01110
01010
01110
00000
#1 5
#2 7
#3 8
1
3 3
0 1 0
1 2 1
0 1 0
*/
public class ShieldsUp {
static int arr[][];//存放飞船的状态
static boolean enemy[][];//存放是否是敌人
static long lifes=0;
static long result[];
public static void main(String[] args) throws Exception{
//System.setIn(new FileInputStream("D:\\sw_case\\shieldup\\sample_input.txt"));
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
int T=Integer.parseInt(reader.readLine());
result=new long[T];
int N=0,M=0;
for (int i = 0; i <T ; i++) {
String[] strArr=reader.readLine().split(" ");
N=Integer.parseInt(strArr[0]);
M=Integer.parseInt(strArr[1]);
arr=new int[N][M];
enemy=new boolean[N][M];
for (int j = 0; j <N ; j++) {
String str=reader.readLine();
for (int k = 0; k < M; k++) {
//arr[j][k]=Long.parseLong(str.charAt(k)+"");
arr[j][k]=Integer.parseInt(str.substring(k,(k+1)));
if(arr[j][k]==0){
enemy[j][k]=true;//是敌人
}else{
lifes=lifes+arr[j][k];//把所有的生命值保存一下
}
}
}
//printArr(enemy);
result[i]=process();
}
for (int i = 0; i <T ; i++) {
System.out.printf("#%d %d\n",i+1,result[i]);
}
reader.close();
}
public static long process(){
long z=0;//保存生命减少的次数
while(lifes>0) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
//int l=arr[][];
if (arr[i][j] > 0) {//是地球飞船
if (i==0
||j==0
||i==arr.length-1
||j==arr[0].length-1
||i - 1 >= 0 && enemy[i - 1][j] //上方有敌人
||(i + 1 < arr.length && enemy[i + 1][j]) //下方有敌人
||(j + 1 < arr[0].length && enemy[i][j + 1]) //右侧有敌人
||(j - 1 >= 0 && enemy[i][j - 1]) //左侧有敌人
) {
z++;
arr[i][j] = arr[i][j] - 1;
lifes--;
}else{//前后左右都没有敌人
z++;
}
}
}
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length; j++) {
if (arr[i][j] == 0) {
enemy[i][j] = true;
}
}
}
}
return z;
}
public static void printArr(int array[][]){
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
System.out.print(array[i][j]+" ");
}
System.out.println(" ");
}
}
public static void printArr(boolean array[][]){
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
System.out.print(array[i][j]+" ");
}
System.out.println(" ");
}
}
}