P1135 奇怪的电梯(BFS)
``
思路分析:
该题考查 广度优先搜索
从a楼层到b楼层需要多少次。
首先利用一个e数组来保存每层楼能够上下走的楼层数。
设置一个v数组来保存是否已经走过某一层楼,防止重复。
每层楼有两种走法,上下层数都一样,所以类似一个二叉树,每个父节点是每个楼层,每个子结点为满足条件的上下两种情况。
通过设置两个队列 q1,q2。
队列 q1 保存每层楼和子结点入队
队列 q2 保存行走的步数
如果q1队列部位空进入循环,如果判断到q1队列 队首元素的值等于要找的值输出q2队首元素 就是行走的步数,并退出函数
否则向q1的队首元素上下行走
t=q1.peek()-e[q1.peek()];//向下走
t=e[q1.peek()]+q1.peek();//向上走
判断t是否超过楼层,或者该楼层已经走过
如果没有则需要将该楼层压进队列,q2中压进q2.peek()+1;
如果最后跳出循环,则说明没找到,需要输出-1,退出函数
import java.util.*;
public class Main {static int n,a,b;static boolean []v=new boolean[210];static int []e=new int[210];public static void main(String[] args) {Scanner sc=new Scanner(System.in);n=sc.nextInt();a=sc.nextInt();b=sc.nextInt();for(int i=1;i<=n;i++){e[i]=sc.nextInt();}bfs();}public static void bfs(){Queue<Integer> q1=new LinkedList();//记录楼层Queue<Integer> q2 =new LinkedList();//记录几次q1.offer(a);q2.offer(0);v[a]=true;while(!q1.isEmpty()){if(q1.peek()==b){System.out.println(q2.peek());return ;}int t=e[q1.peek()]+q1.peek();//访问楼层//电梯向上if(t<=b&&!v[t]){q1.offer(t);q2.offer(q2.peek()+1);v[t]=true;}t=q1.peek()-e[q1.peek()];if(t>=1&&!v[t]){q1.offer(t);q2.offer(q2.peek()+1);v[t]=true;}q1.poll();q2.poll();}System.out.println(-1);return;}
}
P1135 奇怪的电梯(BFS)相关推荐
- 洛谷 P1135 奇怪的电梯
P1135 奇怪的电梯 代码实现 #include <iostream> #include <cstring> #include <queue> using nam ...
- P1135 奇怪的电梯题解
P1135 奇怪的电梯题解 题目 链接 字面描述 代码实现 题目 链接 https://www.luogu.com.cn/problem/P1135 字面描述 题目描述 呵呵,有一天我做了一个梦,梦见 ...
- 洛谷 P1135奇怪的电梯
洛谷 P1135奇怪的电梯 代码 import java.io.*; import java.math.BigInteger; import java.util.*;public class Main ...
- P1135 奇怪的电梯(BFS/DFS)
来源:https://www.luogu.org/problemnew/show/P1135 题目描述 有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1≤i≤N ...
- P1135 奇怪的电梯
题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第 i 层楼(1≤i≤N)上有一个数字 Ki(0≤Ki≤N).电梯只有四个按钮:开,关,上,下.上下的层 ...
- 1.6.2 奇怪的电梯(BFS)
Description 有一天uncle-lu做了一个梦,梦见了一种很奇怪的电梯. 大楼的每一层楼都可以停电梯,而且i层楼上有一个数字.电梯只有四个按钮:开,关,上,下.上下的层数等于当前楼层上的那个 ...
- 洛谷P1135 奇怪的电梯 C++ 思路代码
细心的兄弟们可能会发现啊,我今天的标题改了,这要是为了装逼
- bfs总结 bfs题单 最短路 python (奇怪的电梯 好奇怪的游戏 迷宫 马的遍历 [USACO08FEB]Meteor Shower S)
1 可以用来遍历所有的点 2 可以用来找最短路 3 多源最短路,开始时一次向队列放之多个点#板子 """ def bfs():1 起始点入队标记入队的点while not ...
- 广度优先搜索——奇怪的电梯(洛谷 P1135)
广度优先搜索普及/提高篇,今天讲述的是洛谷里的一道题 奇怪的电梯(洛谷 P1135) 说一下我解题时候的思路吧. 首先读清楚题目,题目要求输出从 a楼 到 b楼的最少次数,楼层必须在[1,n]之间升降 ...
最新文章
- java oracle.sql.struct转字符串_把Oracle查询结果的一列转换为一字符串
- 锁定弹出层(jquery语法)
- php语言的四种循环控制语句,PHP 控制语句之循环用法示例
- 竟然被尤雨溪点赞了:我给Vue生态贡献代码的这一年
- sql server 模糊查询
- 那些没有兴趣花必要的C++时间
- DataGrid中加入CheckBox,并实现单选 选择自 listhome 的 Blog
- html中只能上传文件word,HTML文件表单,接受Word文档(HTML file form, accept Word documents)...
- Nginx源码阅读笔记-内存池的设计
- office图标修复工具_买电脑送Office,可你知道怎样才算用上吗?
- Win10系统字体太小的调整设置教程
- matlab多目标遗传算法工具箱,运用MATLAB遗传算法工具箱求解非线性多目标优化问题,...
- DFS判断回路及回路个数
- una到底啥意思_una到底啥意思_Una_英文名Una是什么意思
- AD——PCB布线实用技巧
- Linux之必备软件安装(搜狗输入法、qq等)
- 英语语法长难句——简单句
- Centos6.2下fetion的安装
- 操作无法完成:- 创建/更新: 未设置强制字段.- 删除: 另一个模型要求删除记录。如果可能的话,把它存档模型: 库龄分析报表 (eno.md.payable.age.analyse.rpt)
- 用STM32定时器中断产生PWM控制步进电机
热门文章
- 集成测试的“面子”和“里子”
- Kafka topic增加partitions
- A Typical Homework (a.k.a Shi Xiong Bang Bang Mang) UVA - 12412
- 华为携手6家鸿蒙生态合作伙伴共同探讨未来科技蓝图
- Maven——maven中的 pom和import的作用到底是什么
- 【树莓派 有趣实践】寻找小项目
- 单独关闭腾讯会议或者钉钉的声音
- 【数据结构应用】航空客运订票系统
- error uploading crisocket: timed out waiting for the conditionswapoff -a # will turn off the swap
- antdvue upload组件的customRequest自定义上传事件一直uploading处理方法