洛谷 P1135 奇怪的电梯 P1135 奇怪的电梯

提供两种思路

第一种DFS

超时第九和第十点

import java.util.*;
import java.io.*;public class Main{static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));static BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));static int N,A,B,INF;static int[] lift;static int[] distance;static boolean[] judge;public static void main(String[] args) throws IOException {String[] S = br.readLine().split(" ");N = Integer.parseInt(S[0]);A = Integer.parseInt(S[1]);B = Integer.parseInt(S[2]);INF = 0x3f3f3f3f;lift = new int[N+1];judge = new boolean[N+1];distance = new int[N+1];Arrays.fill(distance,INF);S = br.readLine().split(" ");for(int i = 0 ; i < S.length ; i++) {lift[i+1] = Integer.parseInt(S[i]);}DFS(A , 0);if(distance[B] == 0x3f3f3f3f) {out.write("-1");}else {out.write(distance[B] + "");}out.flush();out.close();br.close();}private static void DFS(int layer , int count) {if(layer == B) {distance[B] = Math.min(distance[B], count);return ;}if(layer + lift[layer] <= N && !judge[layer+lift[layer]]) {judge[layer+lift[layer]] = true;count++;layer += lift[layer];DFS(layer , count);count--;layer -= lift[layer];judge[layer+lift[layer]] = false;}if(layer - lift[layer] >= 1 && !judge[layer - lift[layer]]) {judge[layer-lift[layer]] = true;count++;layer -= lift[layer];DFS(layer , count);count--;layer += lift[layer];judge[layer-lift[layer]] = false;}}
}

第二种BFS

AC

import java.util.*;
import java.io.*;public class Main{static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));static BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));static int N,A,B;static int[] lift;static boolean[] judge;public static void main(String[] args) throws IOException {String[] S = br.readLine().split(" ");N = Integer.parseInt(S[0]);A = Integer.parseInt(S[1]);B = Integer.parseInt(S[2]);lift = new int[N+1];judge = new boolean[N+1];S = br.readLine().split(" ");for(int i = 0 ; i < S.length ; i++) {lift[i+1] = Integer.parseInt(S[i]);}BFS();out.flush();out.close();br.close();}private static void BFS() throws IOException {Point first = new Point();first.index = A;first.layer = 0;Deque<Point> deque = new LinkedList<>();deque.offer(first);Point result = first;while(!deque.isEmpty()) {result = deque.poll();if(result.index == B) {break;}if(result.index + lift[result.index] <= N && !judge[result.index + lift[result.index]]) {Point node = new Point();node.layer = result.layer + 1;node.index = result.index + lift[result.index];judge[result.index + lift[result.index]] = true;deque.offer(node);}if(result.index - lift[result.index] >= 1 && !judge[result.index - lift[result.index]]) {Point node = new Point();node.layer = result.layer + 1;node.index = result.index - lift[result.index];judge[result.index - lift[result.index]] = true;deque.offer(node);}}if(result.index == B) {out.write(result.layer + "");}else {out.write("-1");}}
}class Point{int layer;int index;
}

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

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

相关文章

fastjson 1.2.47 远程命令执行漏洞

fastjson 1.2.47 远程命令执行漏洞 文章目录 fastjson 1.2.47 远程命令执行漏洞1 在线漏洞解读:2 环境搭建3 影响版本&#xff1a;4 漏洞复现4.1 访问页面4.2 bp抓包&#xff0c;修改参数 5 使用插件检测漏洞【FastjsonScan】5.1使用説明5.2 使用方法5.2.1 右键菜单中&#xff…

pycharm中快速对比两个.py文件

在学习一个算法的时候&#xff0c;就想着自己再敲一遍代码&#xff0c;结果最后出现了一个莫名其妙的错误&#xff0c;想跟源文件对比一下到底是在哪除了错&#xff0c;之前我都是大致定位一个一个对比&#xff0c;想起来matlab可以快速查找出两个脚本文件(.m文件)的区别&#…

Anylogic 读取和写入Excel文件

1、选择面板-连接-Excel文件&#xff0c;拖入到视图中 然后在excel文件的属性中进行绑定外部excel文件。 绑定完之后&#xff0c;在你需要读取的地方进行写代码&#xff0c; //定义开始读取的行数 //这里设为2&#xff0c;是因为第一行是数据名称 int row12; //读取excel文件信…

23面向对象案例1

目录 1、计算连续表达式的一个过程 2、优化后的代码 为什么不能return resultn&#xff1f; 3、用面向对象的方法可以解决冗余的问题&#xff0c;但是还是不能解决result的值可以被随意修改的问题 4、解决不能被随意修改的问题&#xff0c;可以将类属性改成私有变量吗&…

1.X3-Warming up

/* 此程序使用 Boost Spirit 库来解析用户提供的逗号分隔的数字列表。它演示了如何使用 Spirit 来定义解析 器和执行解析操作&#xff0c;并且在用户输入时反复执行解析操作。用户可以提供一系列逗号分隔的数字&#xff0c;程序会检查它们 是否符合指定的解析规则。如果解析成功…

acwing算法基础之数据结构--单链表

目录 1 知识点2 模板 1 知识点 一般以指针实现为主&#xff0c;可以预生成N个结构体。 struct ListNode {int val;ListNode *next; };但这里以数组模拟为主。 单链表和邻接表。 双链表。 &#xff08;一&#xff09;插入操作 链表插入操作的关键步骤&#xff0c;比如在结点…

C++位图,布隆过滤器

本期我们来学习位图&#xff0c;布隆过滤器等相关知识&#xff0c;以及模拟实现&#xff0c;需求前置知识 C-哈希Hash-CSDN博客 C-封装unordered_KLZUQ的博客-CSDN博客 目录 位图 布隆过滤器 海量数据面试题 全部代码 位图 我们先来看一道面试题 给 40 亿个不重复的无符号…

STM32成熟变频逆变器方案

该方案是一款成熟的变频逆变器的方案&#xff0c;主要是把电源从直流到3相交流的转换&#xff0c;包含变频控制板&#xff0c;逆变主板&#xff0c;IO板&#xff0c;变频控制板主控是STM32F103VET6&#xff0c;配套软件。每一块板子都是原理图和PCB一一对应&#xff0c;并且配套…

gitlab版本库安装

gitlab版本库安装 下地址 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ https://packages.gitlab.com/gitlab/gitlab-ce此处以 gitlab-ce-14.3.0为例 安装依赖 [rootebs-139265 opt]# sudo yum install -y curl policycoreutils-python openssh-server perl […

组件封装使用?

组件封装是指在软件开发中&#xff0c;将功能代码或数据封装成一个独立的、可重用的模块或组件。这种封装可以使得代码更加模块化、可维护性和可重用性。在许多编程语言和开发框架中&#xff0c;都有不同的方式来实现组件封装。 以下是一些常见的组件封装方法和技巧&#xff1…

如何让你的程序支持lua脚本

最近做了一个控制机械臂的程序,使用C语言开发的,调试的时候总是需要修改代码来调整运动轨迹, 总是要编译,实在烦人 不过有个方法就是使用lua来调试运动逻辑 代码如下 static int lua_up(lua_State*l) {size_t stepluaL_checkinteger(l,1);//向上动作up(step);return 0; }st…

Vue路由守卫有哪些,怎么设置,有哪些使用场景?

Vue 路由守卫是在 Vue Router 中提供的一种功能&#xff0c;它允许您在导航到某个路由前、路由变化时或导航离开某个路由时执行代码。Vue 路由守卫提供了以下几种类型&#xff1a; 1.全局前置守卫 router.beforeEach 在进入路由前执行的钩子函数&#xff0c;它会接收三个参数&a…

bat脚本字符串替换:路径中\需要替换,解决一些文件写入路径不对的问题

脚本 set dir_tmp%~dp0 set dir%dir_tmp:\\\\\% set dir_tmp%~dp0 新建一个变量dir_tmp&#xff0c;存储获取的脚本当前路径 set dir%dir_tmp:\\\\\% 新建一个变量dir &#xff0c;存储字符串替换之后的路径 其中黄色的\\实际上代表的是一个\

基于springboot实现音乐网站与分享平台项目【项目源码+论文说明】计算机毕业设计

摘要 本论文主要论述了如何使用JAVA语言开发一个音乐网站与分享平台 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述音乐网站与分享平台的当前背景以及系统开…

全球产业链:人形机器人产业链

本心、输入输出、结果 文章目录 全球产业链:人形机器人产业链前言人形机器人架构层划分机器视觉芯片运动控制模块机身减速器机器人关节控制系统执行器零部件全球产业链:人形机器人产业链 前言 全球产业链:人形机器人产业链,涵盖了硬件制造、软件开发和服务应用等多个环节。…

Android Studio git 取消本地 commit(未Push)

操作比较简单 1.选中项目然后依次选择&#xff1a;Git->Repository->Reset HEAD 2.然后再to Commit中输入HEAD^&#xff0c;表示退回到上一个版本。

Js高级技巧—拖放

拖放基本功能实现 拖放是一种非常流行的用户界面模式。它的概念很简单&#xff1a;点击某个对象&#xff0c;并按住鼠标按钮不放&#xff0c;将 鼠标移动到另一个区域&#xff0c;然后释放鼠标按钮将对象“放”在这里。拖放功能也流行到了 Web 上&#xff0c;成为 了一些更传统…

【树莓派 picamera】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言https://www.cnblogs.com/uestc-mm/p/7606855.html 一、picamera是什么&#xff1f;二、使用步骤1.引入库2.先要安装opencv 总结 前言 想用树莓派libcamera &a…

P4451 [国家集训队] 整数的lqp拆分

传送门:洛谷 解题思路: 考虑设 f ( i ) f(i) f(i)为和为 i i i的拆分权值和,那么我们可以得到一个递推关系式 f ( i ) ∑ i 1 n f ( n − i ) ∗ f i b ( i ) f(i)\sum_{i1}^nf(n-i)*fib(i) f(i)i1∑n​f(n−i)∗fib(i)这个表达式的含义就是枚举一个数的值,由于分配率,我们…

C多线程编程- 近似求解π

本程序使用蒙特卡洛方法估算圆周率&#xff08;π&#xff09;。它首先创建了指定数量的线程&#xff0c;每个线程生成一个随机点并检查该点是否在单位圆内。基于这些线程的结果&#xff0c;程序计算在单位圆内的点的比例&#xff0c;并乘以4来估算π的值。为了对比&#xff0c…