前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小蓝在一张无限大的特殊画布上作画。 这张画布可以看成一个方格图,每个格子可以用一个二维的整数坐标表示。 小蓝在画布上首先点了一下几个点:(0, 0), (2020, 11), (

小蓝在一张无限大的特殊画布上作画。 这张画布可以看成一个方格图,每个格子可以用一个二维的整数坐标表示。 小蓝在画布上首先点了一下几个点:(0, 0), (2020, 11), (

作者头像
CaesarChang张旭
发布2021-03-16 15:10:20
5490
发布2021-03-16 15:10:20
举报
文章被收录于专栏:悟道

小蓝在一张无限大的特殊画布上作画。 这张画布可以看成一个方格图,每个格子可以用一个二维的整数坐标表示。 小蓝在画布上首先点了一下几个点:(0, 0), (2020, 11), (11, 14), (2000, 2000)。 只有这几个格子上有黑色,其它位置都是白色的。 每过一分钟,黑色就会扩散一点。具体的,如果一个格子里面是黑色,它就会扩散到上、下、左、右四个相邻的格子中,使得这四个格子也变成黑色(如果原来就是黑色,则还是黑色)。 请问,经过 2020 分钟后,画布上有多少个格子是黑色的。

结果: 20312088

代码语言:javascript
复制
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
/**
    By CaesarChang张旭
*/

public class Main {

    //设置行走方向 上下左右

    static int[][] direct= {{1,0},{0,-1},{0,1},{-1,0}};

    public static void main(String[] args)  {



        //  初始化对象
        Location location1=new Location(3000, 3000);
        Location location2=new Location(5020, 3011);
        Location location3=new Location(3011, 3014);
        Location location4=new Location(5000, 5000);
        //获取一个队列
        Queue<Location> queue=new LinkedList<>();
        queue.add(location1);
        queue.add(location2);
        queue.add(location3);
        queue.add(location4);


        //记录是否走
        int visited[][]=new int[10010][10010];

        for(int i=0;i<visited.length;i++){
            Arrays.fill(visited[i],0);
        }

        int ans=0;
        //开始BFS

        int j=0;
        //来记录秒
        while(j<2020) {
            //当前秒队列里有多少点  n
            int n = queue.size();
            while(n-->0){
                //移除queue中的第一元素
                Location curLocation=queue.poll();
                visited[curLocation.x][curLocation.y]=1;

                //然后遍历这个位置的四周可以走通的位置,
                for(int i=0;i<direct.length;i++) {
                    //如果这个位置的四个周围的节点是可以访问,那么假如队列里面
                    int x=curLocation.x+direct[i][0];
                    int y=curLocation.y+direct[i][1];
                    if(visited[x][y]==1) {
                        continue;
                    }

                    //满足条件 添加到队列里面
                    //标记当前元素走过

                    visited[x][y]=1;
                    //扩散
                    queue.add(new Location(x, y));


                }
            }
            j++;

        }
        for(int i=0;i<=10000;i++)
        {
            for(int k=0;k<=10000;k++)
            {
                if(visited[i][k]==1)
                    ans++;
            }
        }
        System.out.println(ans);

    }

}

class Location{
    int x;
    int y;
    public Location(int x,int y) {
        this.x=x;
        this.y=y;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档