注意:
1.本题容易索引越界异常(RE),要注意火把插到边界位置的情况 ,上下左右都不要越界!
2.火把的坐标位置从1开始,而数组下标从0开始
import java.util.Scanner;
public class Main{
public static void main(String[]args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int k = sc.nextInt();
int arr[][] = new int[n][n];
//火把亮的范围
for(int i = 0;i<m;i++) {
int a = sc.nextInt()-1;
int b = sc.nextInt()-1;
for(int x = a-1;x<a+2;x++) {
if(x<0) continue;//判断火把是否在边缘位置,防止数组下标左越界
if(x>=n) break;//防止右越界
for(int y = b-1;y<b+2;y++) {
if(y<0) continue;
if(y>=n) break;
arr[x][y] = 1;//1为亮,0为暗
}
}
if(a-2>=0) {
arr[a-2][b] = 1;
}
if(a+2<n) {
arr[a+2][b] = 1;
}
if(b-2>=0) {
arr[a][b-2] = 1;
}
if(b+2<n) {
arr[a][b+2] = 1;
}
}
//萤石亮的范围
for(int i = 0;i<k;i++) {
int a = sc.nextInt()-1;
int b = sc.nextInt()-1;
for(int x = a-2;x<a+3;x++) {
if(x<0) continue;
if(x>=n) break;
for(int y = b-2;y<b+3;y++) {
if(y<0) continue;
if(y>=n) break;
arr[x][y] = 1;
}
}
}
int monster = 0;
for(int i = 0;i<n;i++) {
for(int j = 0;j<n;j++) {
if(arr[i][j]==0) {
monster++;
}
}
}
System.out.println(monster);
}
}