当前位置: 首页 > news >正文

wordpress 下载网站加盟网站推广

wordpress 下载网站,加盟网站推广,seo关键词选择及优化,网络运营师资格证题目:P1135 奇怪的电梯 P1135 奇怪的电梯 题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第 i i i 层楼( 1 ≤ i ≤ N 1 \le i \le N 1≤i≤N)上有一个数…

题目:P1135 奇怪的电梯

P1135 奇怪的电梯

题目描述

呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第 i i i 层楼( 1 ≤ i ≤ N 1 \le i \le N 1iN)上有一个数字 K i K_i Ki 0 ≤ K i ≤ N 0 \le K_i \le N 0KiN)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如: 3 , 3 , 1 , 2 , 5 3, 3, 1, 2, 5 3,3,1,2,5 代表了 K i K_i Ki K 1 = 3 K_1=3 K1=3 K 2 = 3 K_2=3 K2=3,……),从 1 1 1 楼开始。在 1 1 1 楼,按“上”可以到 4 4 4 楼,按“下”是不起作用的,因为没有 − 2 -2 2 楼。那么,从 A A A 楼到 B B B 楼至少要按几次按钮呢?

输入格式

共二行。

第一行为三个用空格隔开的正整数,表示 N , A , B N, A, B N,A,B 1 ≤ N ≤ 200 1 \le N \le 200 1N200 1 ≤ A , B ≤ N 1 \le A, B \le N 1A,BN)。

第二行为 N N N 个用空格隔开的非负整数,表示 K i K_i Ki

输出格式

一行,即最少按键次数,若无法到达,则输出 -1

输入输出样例 #1

输入 #1

5 1 5
3 3 1 2 5

输出 #1

3

说明/提示

对于 100 % 100 \% 100% 的数据, 1 ≤ N ≤ 200 1 \le N \le 200 1N200 1 ≤ A , B ≤ N 1 \le A, B \le N 1A,BN 0 ≤ K i ≤ N 0 \le K_i \le N 0KiN

本题共 16 16 16 个测试点,前 15 15 15 个每个测试点 6 6 6 分,最后一个测试点 10 10 10 分。


做法1:DFS

#include <bits/stdc++.h>
using namespace std;
int k[301];//楼层的值 
int minstep[301];//每层楼的最小步数 
int ans=-1;//存储结果 
int n,a,b;
void dfs(int x,int step)
{if(ans!=-1&&step>=ans) return;//剪枝if(x==b)//到达终点 {if(ans==-1||step<ans)//判断是否有更小的步数 {ans=step;}return;}//记忆化剪枝:如果当前的步数不比之前的步数更优 if(step>=minstep[x]) return;minstep[x]=step;//更新最小步数 int up=x+k[x];//往上 if(up<=n) dfs(up,step+1); //判断是否符合条件 int down=x-k[x];//往下 if(down>=1) dfs(down,step+1); //判断是否符合条件 
}
int main() {cin>>n>>a>>b;for(int i=1;i<=n;i++){cin>>k[i];}fill(minstep, minstep + 201, INT_MAX);//初始化 dfs(a,0); //从a开始 cout<<(ans!=-1?ans:-1);return 0;
}

做法2:BFS

#include <bits/stdc++.h>
using namespace std;
int k[301];
int step[301];
int n,a,b;
int main() {cin>>n>>a>>b;for(int i=1;i<=n;i++){cin>>k[i];}fill(step, step + 201, -1);//初始化 step[a]=0;//起点的步数是0 queue<int>q;//创建队列 q.push(a);//将起点入队 while(!q.empty())//bfs {int x=q.front();//获取头元素 q.pop();//并弹出 if(x==b)//如果到达了终点,就输出步数 {cout<<step[x];return 0;}//上楼 int up=x+k[x];if(up<=n&&step[up]==-1)//楼层在条件内且未被访问过 {step[up]=step[x]+1;//步数++ q.push(up);//入队 }//下楼 int down=x-k[x];if(down>=1&&step[down]==-1)//楼层在条件内且未被访问过{step[down]=step[x]+1;//步数++q.push(down);//入队 } }cout<<-1;//队列为空,未找到输出-1 return 0;
}

总结

这道题目是一道经典的搜索问题,适合用来练习 ​DFS(深度优先搜索)​ 和 ​BFS(广度优先搜索)​ 的模板


本文章为平时做题笔记,有什么技术性问题都可以在评论区打出来,我都会认真查看并尽力解答大家的疑问。欢迎大佬来提出修改意见,感谢大家的关注和支持!

http://www.dtcms.com/a/593517.html

相关文章:

  • Pycharm社区版安装
  • 每日算法(1)
  • 基于PLC的多级传送带控制与改造
  • 网站建设案例知名 乐云践新广州市专业网站设计
  • 数字货币众筹网站开发创意设计公司官网
  • requst payload和query string parameters
  • Web网页之前端三剑客汇总篇(基础版)
  • 【AI学习-comfyUI学习-简易加载器抠图工作流(替换抠图节点版)-各个部分学习-第七节】
  • Linux中自定义服务开机自启nginx
  • 【Linux】snakemake应用之扩增子分析流程
  • 可以做哪些网站有哪些内容给别人做的网站要复杂做安全扫描
  • vue中回显word、Excel、txt、markdown文件
  • [吾爱大神原创] 自用 图片叠加 批量图片转PDF工具 [牛马工具]
  • 微信小程序开发案例 | 幸运抽签小程序(上)
  • GEAR:一种高效的 KV Cache 压缩方法,用于几乎无损的大语言模型生成式推理
  • 西樵网站建设公司wordpress 宠物
  • Bootstrap5 表格深度解析
  • abuild 命令行工程编译
  • python自动化005:app自动化入门环境搭建
  • 云南品牌网站开发番禺建设网站开发
  • HarmonyOS:线性布局(Row/Column)
  • 鸿蒙Next学习解析之针对PC2in1设备的窗口管理新增支持主窗的尺寸记忆功能
  • 【大数据技术02】统计学和模型
  • Python数据挖掘之回归
  • 数据管理技术发展的3个阶段
  • 进网站后台显示空白购买东西网站怎么做
  • 做网站的公司都有哪些模板制作方法
  • .NET线程池ThreadPool.QueueUserWorkItem
  • Python爬虫进阶:面向对象设计与反爬策略实战
  • 河北省建设厅网站站长万网主体新增网站备案需要是滴么