解题思路
对各个点的四个方向都进行dfs即可。
扩散2020分钟达到的最大上界为4020,最大下界为-2020,最大右边界为4020,最大左边界为-2020。
所以用一个6040*6040的数组存储即可。但是为了方便,可以创建一个更大的数组进行操作。
伪代码
int test(){
//数组足够大,不会出现越界情况
int[][] arr = new int[20000][20000];
for(int i = 0;i < 20000;i++){
for(int j = 0;j < 20000;j++){
arr[i][j] = -1;
}
}
//将题目给的点的坐标值都增加10000
int[][] location = {{10000,10000},{10011,10014},{12020,10011},{12000,12000}};
arr[10000][10000] = 1;
arr[10011][10014] = 1;
arr[12020][10011] = 1;
arr[12000][12000] = 1;
for(int[] l :location){
dfs(arr,l[0],l[1],0);
}
int res = 0;
for(int i = 0;i < 20000;i++){
for(int j = 0;j < 20000;j++){
if(arr[i][j] == 1){
res++;
}
}
}
return res;
}
void dfs(int[][] arr,int x,int y,int count){
//判断越界(数组足够大,其实不用判断)
if(x < 0 || y < 0 || x >= arr.length || y >= arr[0].length){
return;
}
if(count == 2021){
return;
}
arr[x][y] = 1;
dfs(arr,x+1,y,count+1);
dfs(arr,x,y+1,count+1);
dfs(arr,x-1,y,count+1);
dfs(arr,x,y-1,count+1);
}