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

青岛网站建设在线手机做网页的软件

青岛网站建设在线,手机做网页的软件,哪个市文化和旅游网站做的好,深圳营销建网站公司题目: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/wzjs/61166.html

相关文章:

  • 做网站用什么语言快外链购买平台
  • 做网站在线支付系统多少钱百度识图找原图
  • 泸县手机网站建设免费创建网站
  • .net做网站安全吗南宁网络推广有几家
  • 百度云建网站打开百度网页版
  • 湖北网站设计公司北京seo公司司
  • wordpress twitter超级优化
  • 最早做弹幕的网站百度引擎搜索引擎
  • 响应式网页设计方法seo外包公司多少钱
  • 淘宝客网站源码html室内设计培训
  • jsp可以做网站吗中国疾控卫生应急服装
  • 大兴快速网站建设哪家好2023北京封控了
  • 用sublime做的网站打不开站内优化主要从哪些方面进行
  • 佛山小学网站建设成都网络营销公司
  • 网站登录验证码不显示百度商务合作联系
  • 网站建设 功能需求网站seo规划
  • 在哪找做调查赚钱的网站好重庆网站seo好不好
  • 网站制作视频教程全套免费申请网站
  • 南京做网站营销广州做seo的公司
  • 网站制作公司有哪些证游戏推广话术
  • 杭州哪里做网站好seo按天计费系统
  • 小男孩与大人做的网站重庆网站建设技术外包
  • 新网站前期seo怎么做网站联盟广告
  • flash网站开发百度推广入口登录
  • 十大免费软件下载seox
  • 武汉建设深圳搜索引擎优化的简称是
  • 西安的网站建设网站seo外包公司专家
  • 怀集建设房管部门网站免费网站推广软件下载
  • 雅茂道网站建设大连网站seo
  • 无锡网站建设设计seo基础入门