洛谷bfs题2---P1825 [USACO11OPEN] Corn Maze S

news2024/10/6 17:23:19

P1825 [USACO11OPEN] Corn Maze S

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {
    public static int N;//行
    public static int M;//列
    public static Queue<Integer> q = new LinkedList<>();
    public static int[] x = new int[]{1, -1, 0, 0};
    public static int[] y = new int[]{0, 0, 1, -1};
    public static char[][] map = new char[305][305];
    public static int[][] visit = new int[305][305];
    public static int[][] step = new int[305][305];
    public static int flag = 0;

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        N = scan.nextInt();
        M = scan.nextInt();
        for (int i = 0; i < N; i++) {
            map[i] = scan.next().toCharArray();
        }

        bfs();
    }

    public static void bfs() {
        int f = 0;
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                if (map[i][j] == '@') {
                    q.add(i);
                    q.add(j);
                    step[i][j] = 0;
                    visit[i][j] = 1;
                    f = 1;
                    break;
                }
            }
            if (f == 1) {
                break;
            }
        }
        while (!q.isEmpty()) {
            int row = q.poll();
            int col = q.poll();
            boolean flag = true;
            int x1=row;
            int y2=col;
            if(map[row][col]=='='){
                System.out.println(step[row][col]);
                return;
            }
            if (map[row][col] >= 'A' && map[row][col] <= 'Z') {
            
                for (int i = 0; i < N && flag; i++) {
                    for (int j = 0; j < M && flag; j++) {
                        if (map[i][j] == map[row][col] && (i != row || j != col)) {
                            row = i;
                            col = j;
                            flag = false;
                       }
                    }
                }
            }
            for (int i = 0; i < 4; i++) {
                int r = row + x[i];
                int c = col + y[i];
                if(r>=0&&r<N&&c>=0&&c<M&&visit[r][c]==0&&map[r][c]!='#'){
                        step[r][c]=step[x1][y2]+1;
                        visit[r][c]=1;
                        q.add(r);
                        q.add(c);
                }
            }
        }
    }
思路:

这道题与往常的模板有一个小小的不同,往常是将预备入队的元素进行检查,如果发现有我们需要的答案则直接结束,输出step+1,而如果有可以继续走的元素则入队,step+1.

而这题我们是将将要出队的元素进行检查。

 

因为如果出队的是装置,我们就会跳到另外一个装置,然后对这个装置的四周进行判断是否要入队。而判断是否入队则是不是'#'就可以入队了

如果出队的恰好是'=',我们就可以直接输出这个元素的step了。

注意点:
int x1=row;
int y2=col;

如果出队的是装置,那么我们要保留这个原装置的步数,因为如果我们把原装置的步数赋值给新装置,那么新装置自己的步数就被覆盖掉了,当进行下一次这个新装置出队时,又跳跃到旧,这个步数就是错的。这个就是测试点8的注意点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1038460.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

变量、因子、缺失值、类型转换、剔除多余变量、随机抽样、用R使用SQL、trim、na.rm=TRUE、数据标准化应用

变量&#xff1a;名义型、有序型、连续型变量 名义型&#xff1a;普通事件类型&#xff0c;如糖尿病I型和糖尿病II型。 有序型&#xff1a;有顺序的事件类型&#xff0c;如一年级、二年级和三年级。 连续型&#xff1a;表示有顺序的数量&#xff0c;如年龄。 因子&#xff1a;…

现代架构设计:构建可伸缩、高性能的系统

文章目录 架构设计的基本原则1. 可伸缩性2. 可用性和容错性3. 性能4. 安全性5. 简单性 现代架构设计的关键概念1. 微服务架构2. 容器化3. 云原生4. 自动化和持续集成/持续交付&#xff08;CI/CD&#xff09; 构建可伸缩、高性能的系统的最佳实践1. 合理使用缓存2. 负载均衡3. 弹…

在Python中处理CSV文件的常见问题

当谈到数据处理和分析时&#xff0c;CSV&#xff08;Comma-Separated Values&#xff09;文件是一种非常常见的数据格式。它简单易懂&#xff0c;可以被绝大多数编程语言和工具轻松处理。在Python中&#xff0c;我们可以使用各种库和技巧来处理CSV文件&#xff0c;让我们一起来…

Server2101

B-1:数据库服务渗透测试 任务环境说明: 服务器场景:Server2101 服务器场景操作系统:未知(关闭连接) 1.通过分析靶机Server2101页面信息,寻找漏洞页面,将WEB服务存在SQL注入漏洞的页面名称作为Flag提交; nmap -p- 扫描发现靶机80和443端口有http、https服务 访问网站…

Nginx访问认证

访问认证 有时候&#xff0c;我们⼀些站点内容想要进⾏授权查看&#xff0c;只能输⼊账号密码之后才能访问&#xff0c;例如⼀些重要的内⽹平台&#xff0c;CRM &#xff0c; CMDB &#xff0c;企业内部 WIKI 等等。 htpasswd是Apache密码⽣成⼯具&#xff0c;Nginx⽀持auth_ba…

多卫星定位算法

多卫星定位算法 现已知有N(N>4)个卫星&#xff0c;每个卫星的坐标用 X s {X_s} Xs​表示&#xff0c;其对应的伪距用 r r r表示。 由于伪距不是准确的、真实的距离&#xff0c;它有所干扰。所以我们可以再根据三维空间中的距离公式&#xff0c;另外估计卫星和用户的距离为 …

Visual Studio Cpp CLR C# 替换

1、首先将文件中所有都替换 你需要的名字 替换为整个解决方案 2、新建工程取名 Laserbeam_upper 3、把原工程下的cpp放进来&#xff0c;并改名Laserbeam_upper 4、在这里逐步添加 属性表配置opencv 5、cpp需要修改的两个地方 6、CLR新建和添加 选类库新建、然后直接粘贴进来…

Learn Prompt-Prompt 高级技巧:API-Bank AgentBench

模型评估是Agent学习过程中至关重要的一环。通过分析数据来评估Agent的能力&#xff0c;可以客观地衡量它在特定任务或领域中的表现。数据评估是不断迭代和改进的基础。通过反复评估和分析数据&#xff0c;Agent可以逐步改进自身&#xff0c;并不断优化其能力。数据评估还可以将…

浅谈为什么多态只能是指针或引用

其实在很早之前&#xff0c;我一直没有注意到这个问题&#xff0c;直到今天碰见了一道题&#xff0c;顺便前面的博客中&#xff0c;继承写到&#xff0c;子类中不包含父类&#xff0c;子类只是继承了父类的成员变量和函数&#xff0c;由这一点&#xff0c;引发了我对切片以及赋…

I/O设备管理

目录 I/O设备管理&#xff08;1&#xff09; 第一节 I/O设备管理的基本概念 一、I/O设备管理的任务 二、I/O设备分类 三、I/O设备管理与文件管理的关系 第二节 I/O硬件和I/O软件的组成 一、I/O硬件组成 二、I/O软件组成 三、设备独立性 第三节 I/O设备控制方式 一…

虚拟机安装 centos

title: 虚拟机安装 centos createTime: 2020-12-13 12:00:27 updateTime: 2020-12-13 12:00:27 categories: linux tags: 虚拟机安装 centos 路线图 主机(宿主机) —> centos --> docker --> docker 镜像 --> docker 容器 — docker 服务 1.前期准备 一台 主机 或…

图像相关名词概述

颜色模式 通过赋予C的不同维度不同的含义&#xff0c;可以用来描述不同的颜色空间。颜色模式&#xff0c;是将某种颜色表现为数字形式的模型&#xff0c;或者说是一种记录图像颜色的方式。本单元主要讲述两个常用的颜色模式&#xff1a;RGB&#xff0c;HSV。 RGB模式是工业界的…

数字IC笔试千题解--多选题篇(三)

前言 出笔试题汇总&#xff0c;是为了总结秋招可能遇到的问题&#xff0c;做题不是目的&#xff0c;在做题的过程中发现自己的漏洞&#xff0c;巩固基础才是目的。 所有题目结果和解释由笔者给出&#xff0c;答案主观性较强&#xff0c;若有错误欢迎评论区指出&#xff0c;资料…

机器学习(19)---XGBoost入门

XGBoost 一、概述1.1 使用XGBoost库1.2 XGBoost的三大板块 二、集成算法及重要参数2.1 概述2.2 XGBoost的简单建模2.3 n_estimators学习曲线2.4 方差与泛化误差2.5 重要参数subsample2.6 迭代决策树&#xff1a;重要参数eta 三、XGBoost的智慧3.1 概述3.2 XGB的目标函数&#x…

26. 图论 - 树

文章目录 树生成树最小生成树图与人工智能人工智能数学基础Hi,你好。我是茶桁。 这一节课是我们AI秘籍整个数学篇的最后一节课。同样的,这节课的概念还是比较重要的。我们要来了解一下「树」。 树 树其实是图的一种,首先呢它是一个连通图,是一个不含圈的连通图。 什么叫…

开机自启动Linux and windows

1、背景 服务器由于更新等原因重启&#xff0c;部署到该服务上的响应的应用需要自启动 2、Linux 2.1 方式一 编写启动应用的sh脚本授权该脚本权限 chmod 777 xxx.sh 修改rc.loacl 位置&#xff1a;/etc/rc.local 脚本&#xff1a;sh /home/xxxx.sh & 授权rc.local …

项目管理和问题跟踪工具Redmine

【勘误】&#xff1a;网友 Bnake 指出&#xff0c;用青龙面板实现阿里云盘每日签到 一文中&#xff0c;新建变量值时&#xff0c;变量名应该为 refreshToken&#xff0c;而不是截图中的 refresh_Token&#xff0c;非常感谢他的仔细和认真~ 什么是 Redmine &#xff1f; Redmine…

云计算与大数据——Spark的安装和配置

云计算与大数据——Spark的安装和配置 Spark的简单介绍&#xff1a; Apache Spark是一个基于内存的分布式计算框架&#xff0c;它提供了高效、强大的数据处理和分析能力。与传统的Hadoop MapReduce相比&#xff0c;Spark的主要优势在于其能够将数据集缓存在内存中&#xff0c…

Abaqus多孔材料、多孔介质、双相材料、随机三维多孔结构建模插件:Random Porous Structure 3D

插件介绍 Random Porous Structure 3D - AbyssFish 插件可在Abaqus软件内生成三维多孔结构&#xff0c;可用于两相材料或多孔介质的模拟等。 插件可指定孔隙的分布概率、生长概率、孔隙率、平滑范围等参数&#xff0c;其参数控制原理可参考四参数随机生长法&#xff08;QSGS…

开源C# Winform Scada 上位机系统

开源Winform Scada系统 功能展示C#源码程序说明下载程序源码获取 功能展示 本软件目前包含: 常用PLC通讯控件, 常用IO读写控件, 权限过滤, 用户管理, 日志记录, 报警记录. 使用方式: 在VS2022里面拖放控件, 填写控件属性,完成组态.即可成为一个完整的上位机. C#源码 程序说明…