首页 > 其他分享 >灌溉问题——队列的应用

灌溉问题——队列的应用

时间:2024-03-13 12:32:43浏览次数:29  
标签:deque scan 队列 灌溉 int 应用 size

题目链接:1.灌溉 - 蓝桥云课 (lanqiao.cn)

主要知识点在于队列的使用,详细的解释在代码中注释给出

队列的特性:

队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表,先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。 

package lanqiao;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;

/**
 * 2023/11/25
 */
public class lanqiao551_灌溉 {
    static int[][] dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};//定义四个方向(上、下、左、右)

        public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();//定义花园的长和宽
        int m = scan.nextInt();
        boolean[][] arr = new boolean[n][m];//用来记录方格是否被灌溉过
        Deque<int[]> deque = new ArrayDeque<>();//定义一个队列
        int t = scan.nextInt();//输入水管的数量
        while (t-- > 0)
            deque.add(new int[]{scan.nextInt() - 1, scan.nextInt() - 1});//在队列中加入水管的坐标位置(索引是从0开始的,所以要减1)
        int ans = deque.size();//将ans赋值为队列的大小,ans为方格数
        int k = scan.nextInt();//输入灌溉的分钟数
        int k_=k;//仅是为了最后输出时应用,保留k的初始值
        while (k-- > 0) {
            int size = deque.size();//将队列的大小(此时队列里只有水管处)赋值给size
            for (int i = 0; i < size; i++) {//遍历结束后,队列为空
                //****************
                int[] cur = deque.pollFirst();//取出队列的第一个值(第一次为水管的位置,接下来为已经灌溉过的方块)(取出后队列里就没有这个数字了)
                //****************
                int r = cur[0], c = cur[1];//令r为横坐标(x),c为纵坐标(y)
                for (int[] dir : dirs) {
                    //****************
                    int x = r + dir[0], y = c + dir[1];//将x,y进行上下左右移动,来模仿水的扩展位置

                    if (x >= 0 && x < n && y >= 0 && y < m && !arr[x][y]) {//判断扩展的位置是否合理,而且是否被灌溉过
                        //****************
                        deque.addLast(new int[]{x, y});//如果没有被灌溉过,就把它加入到队列中
                        arr[x][y] = true;//将这个位置置为true,意为已经灌溉过了
                        //****************
                    }
                }
            }
            ans += deque.size();//将每次灌溉好的方块数加入到ans中(每次的队列大小都是重新开始的,都是新增的方块数)
        }
        System.out.println(k_+"分钟后,灌溉的方块数为:"+ans);//输出结果
    }
}

其中,while循环中还可以写成:

        while (k-->0){
            int size=deque.size();
            for (int i=0;i<size;i++){
                int[] cur=deque.pollFirst();
                int r=cur[0],c=cur[1];
                for (int j=0;j< 4;j++){//代替上面代码中比较难理解的增强for循环
                    int x=r+dirs[j][0];//与上面代码的解释相同,向四个方向进行判断
                    int y=c+dirs[j][1];
                    if (x<0||x>=n||y<0||y>=m)//与上面代码的判断条件相反,此处为如果超出花园的范围,则跳出此次循环,进行下一个方向的判断
                        continue;
                    if (!arr[x][y]){//如果方块没被灌溉过,则加入到队列,并修改状态为灌溉过
                        deque.addLast(new int[]{x,y});
                        arr[x][y]=true;
                    }
                }
            }

 运行结果:

3 6
2
2 2
3 4
1
1分钟后,灌溉的方块数为:9

进程已结束,退出代码为 0

 

 

标签:deque,scan,队列,灌溉,int,应用,size
From: https://blog.csdn.net/m0_61237591/article/details/136676247

相关文章

  • Gin Web框架在Go语言中的应用与实践
    引言Gin是一个用Go语言编写的HTTPWeb框架。它以高性能、简洁的API设计和良好的生产率而闻名。Gin框架的设计理念是使得开发者能够以最少的代码实现强大的Web应用功能。本文档将介绍Gin框架的核心概念、特性、安装、基本用法以及一些高级应用场景。Gin框架的......
  • 昆泰芯KTH78系列在空心杯领域的创新应用
    KTH78系列传感器在空心杯电机领域的应用01空心杯电机,创新无限与传统电机不同,空心杯电机不再依赖传统的铁芯转子结构,取而代之的是一种崭新的线圈构造,看起来仿佛是一个空心的杯子。这种独特的结构设计为电机带来了轻量化、高效率、精准、高转速还有小体积等特点,使得很多创新的......
  • CH395实现FTP_Client应用(上)
    测试环境:CH30v307RCT6+CH395Q,PC端工具:XLight(FTP服务器,语言为英文)1.主要代码说明(1)main.c(2)CH395FTP.c工程CH395FTP.c99行CH395_FTPInterCmd函数执行了四个主要的流程,包括登录、搜索目录、下载文件、上传文件。在该函数中可以修改想要访问的文件夹和文本文档名称,也可修改想......
  • 虾分发:高效安全的应用分发解决方案
    虾分发是一个提供应用程序上传、审核、测试、分发和下载服务的平台。这个平台支持开发者上传自己的应用程序,通过审核后,提供下载链接或二维码,供用户下载和安装。开发者可以管理和监控自己应用的下载情况,并随时更新应用版本和描述。虾分发平台具有一些显著的特点和优势。首先,它支持......
  • CH395实现FTP_Client应用(下)
    CH395实现FTP_Client例程、抓包和打印log可以在下面的博客中下载CH395实现FTP_Client应用(上)-lqlq123-博客园(cnblogs.com) 本篇是对例程流程抓包和打印日志的解析1.串口打印日志(从上电到流程结束):1SourIP:192,168,3,30,//本地IP2......
  • 界面开发框架DevExpress XAF v24.1新版预告 - 跨平台应用UI(二)
    DevExpressXAF是一款强大的现代应用程序框架,允许同时开发ASP.NET和WinForms。XAF采用模块化设计,开发人员可以选择内建模块,也可以自行创建,从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。本文中的内容概述了XAF跨平台.NET应用UI和DevExpress.NETApp、WebAPI服......
  • App分发平台:开发者发布与推广应用的多元选择
    App分发平台是应用程序开发者发布和推广其应用的重要渠道。这些平台提供了丰富的应用资源,使得用户可以轻松下载和安装各种类型的应用程序。以下是一些主要的App分发平台:腾讯应用宝:作为腾讯公司旗下的应用分发平台,应用宝提供了海量的应用程序资源,涵盖了游戏、社交、工具、生活等......
  • 【R语言实战】——fGARCH包在金融时序上的模拟应用
    ......
  • C# 队列(Queue)
    原文链接:https://blog.csdn.net/qq_38693757/article/details/130891605一、概述表示对象的先进先出集合。队列和其他的数据结构一样,是一种存储容器,它遵循先进先出的原则,能够存储任意类型,但并不能获取到指定的位置,只能存入和取出,取出元素后,Queue内部的元素自动删除,其实队列......
  • Ajax及其应用
    AJAX概述1、AJAX的定义:异步的JS和XML,使用XMLHttpRequest对象与服务器通信;可以在不重新刷新页面的情况下与服务器通信,交换数据或更新页面。2、概念:AJAX是浏览器与服务器进行数据通信的技术。3、工作原理:客户端发送请求交给xhr,xhr把请求提交给服务器进行处理,服务器响应数据交给xh......