填空题二:扩散

解题思路

对各个点的四个方向都进行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);

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LXJ6379

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值