洛谷P1135 奇怪的电梯 BFS例题
好,这是一道黄题。几个月前(2017.10.29)的我拿了可怜的20分。
这是当年的蒟蒻代码
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdlib>
using namespace std; int n,b,c;
int a[]; int xiuxi(int now,int k)
{
if(k>) return -;
int aa=,bb=;
if(now == c) return k; if(now+a[now]<=n)
{
aa=xiuxi(now+a[now],k+);
}
if(now-a[now]>)
{
bb=xiuxi(now-a[now],k+);
}
///return ???;
} int main()
{
scanf ("%d%d%d",&n,&b,&c);
for(int i=;i<=n;i++)
{
scanf ("%d",&a[i]);
} int ans=xiuxi(b,);
printf("%d",ans);
return ;
}
蒟蒻代码
首先,头文件瞎加#(滑稽),然后,搜索的时候没有处理好无限循环,只能靠200那个上限来return,导致了TLE。xiuxi函数写的一塌糊涂。也没有确定是最小值就输出,导致了个WA。我也懒得改了。
今天(2018.02.23)重新看一看这个,就想到了预处理之后反着BFS。其实正着BFS也行。不知道我为什么脑子灵光一闪选择了反着。。
先交了一次,RE+WA 60分。先随手把几个数组开大到400,然后在BFS里解决了一个判断是否空队列,莫名A了。
这是AC代码:
#include <cstdio>
#include <cstring>
using namespace std;
///P1135
int n,A,B,x; int p[],ptop,ptail=;
bool vis[];
int step[]; struct floor{
int top,from[];
}f[]; void bfs(int now)
{
for(int i=;i<=f[now].top;i++)
{
if(vis[f[now].from[i]]) continue;
vis[f[now].from[i]]=;
p[++ptop]=f[now].from[i];
step[f[now].from[i]]=step[now]+;
if(f[now].from[i]==A) return;
}
if(ptop==ptail-) return;
ptail++;
bfs(p[ptail-]);
return;
} int main()
{
scanf ("%d%d%d",&n,&A,&B);
for(int i=;i<=n;i++)
{
scanf ("%d",&x);
if(i-x>=) f[i-x].from[++f[i-x].top]=i;
if(i+x<=n) f[i+x].from[++f[i+x].top]=i;
}
memset(step,-,sizeof(step)); vis[B]=true;
step[B]=;
p[++ptop]=B; bfs(B); printf("%d",step[A]);
return ;
}
AC代码
手写队列,应该很好理解。可以拿来当BFS模板。这次去北京除了学了很多新知识以外,还意外的(意料之中的)提高了代码实现能力#(滑稽)。
那么就这样吧。晚安,11015.
#include <cstdio>
#include <queue>
const int N = ; int n, b, a, k[N];
bool vis[N]; struct Sta {
int floor, step;
Sta(int f, int s) {
this->floor = f;
this->step = s;
}
}; void BFS() {
std::queue<Sta> Q;
Q.push(Sta(a, ));
vis[a] = ;
while(!Q.empty()) {
Sta s = Q.front();
Q.pop();
if(s.floor == b) {
printf("%d", s.step);
return;
}
int p = s.floor + k[s.floor];
if(p > && p <= n && !vis[p]) {
vis[p] = ;
Q.push(Sta(p, s.step + ));
}
p = s.floor - k[s.floor];
if(p > && p <= n && !vis[p]) {
vis[p] = ;
Q.push(Sta(p, s.step + ));
}
}
printf("-1");
return;
} int main() {
scanf("%d%d%d", &n, &a, &b); for(int i = ; i <= n; i++) {
scanf("%d", &k[i]);
} BFS(); return ;
}
2018儿童节特供:全新AC代码,仅需12分钟!
洛谷P1135 奇怪的电梯 BFS例题的更多相关文章
- 【DFS与BFS】洛谷 P1135 奇怪的电梯
题目:奇怪的电梯 - 洛谷 (luogu.com.cn) 因为此题数据范围较小,有dfs及bfs等多种做法. DFS 比较正常的dfs,注意vis数组一定要回溯,不然会漏情况 例如这个数据 11 1 ...
- 洛谷 P1135 奇怪的电梯 【基础BFS】
题目链接:https://www.luogu.org/problemnew/show/P1135 题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第 i 层 ...
- TYVJ P3522 &&洛谷 P1135 奇怪的电梯 Label:bfs
题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开 ...
- 洛谷P1135 奇怪的电梯
题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼 (1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮: ...
- 洛谷 P1135 奇怪的电梯
题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开 ...
- 洛谷 P1135 奇怪的电梯 (dfs)
题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开 ...
- 洛谷P1135 奇怪的电梯【bfs】
题目:https://www.luogu.org/problemnew/show/P1135 题意: 一共有n层楼,在第i层可以往上或往下$k_i$层. 问从$a$层到$b$层至少需要多少乘多少次电梯 ...
- 集训作业 洛谷P1135 奇怪的电梯
这个题我见过!!! 我之前在石油大学的网站上做练习赛,提高了很多,这个题是我第一次在比赛里见到深搜. 当时蒙蔽的一批,现在发现好简单…… 这个题和普通的深搜没什么区别,甚至可以说简单了,因为这个是1维 ...
- 洛谷 P1135 奇怪的电梯 (DFS)
题意:有一\(n\)层高的大楼,每层楼都只能在合法情况下上\(x\)层或者下\(x\)层,问你是否能从\(a\)层楼坐电梯到\(b\)层楼,输出最小步数. 题解:直接dfs搜,\(flo\)表示层数, ...
随机推荐
- [UWP 自定义控件]了解模板化控件(2.1):理解ContentControl
UWP的UI主要由布局容器和内容控件(ContentControl)组成.布局容器是指Grid.StackPanel等继承自Panel,可以拥有多个子元素的类.与此相对,ContentControl则 ...
- 分布式监控系统Zabbix3.4-针对MongoDB性能监控操作笔记
公司在IDC机房的一台服务器上部署了MongoDB,由于所存储的业务数据比较重要,所以对MongoDB的监控显得尤为重要!Zabbix监控MongoDB性能的原理:通过echo "db.se ...
- Gitblit版本服务器环境部署记录
Gitblit介绍Gitblit 是一个纯 Java 库用来管理.查看和处理 Git 资料库.相当于 Git 的 Java 管理工具,支持linux系统.Git是分布式版本控制系统,它强调速度.数据一 ...
- Zookeeper Ephemeral结点使用心得
原文地址:https://www.cnblogs.com/linlemo/p/4807178.html 公司里面在拿Zookeeper做命名服务,通过使用ZK,前端只需要根据指定的ZK地址获得相应的资 ...
- SCRUM 12.23
距离第二轮迭结束只有几天了. 我们全体组员现在的工作方向都在应用测试上. 明天的任务分配如下 成员 已完成任务 新任务 彭林江 落实API 自动爬虫测试 王卓 提升爬虫程序性能 正确性测试 郝倩 提升 ...
- LINUX实践之模块
模块实践 --关于模块代码部分 ---首先是.c代码: 一定会用到的函数有这几个:module_init().module_exit().MODULE_LICENSE() 会用到的头文件:module ...
- UserControl 的一个值得注意的问题 [属性" * "的代码生成失败.错误是:"程序集"*.Version=1.0.0.0,Culture=neutral,..........无标记为序列化"
开发时在做UserControl,需要注意的List<>集合问题~~~! 其他类型的集合可能也存在这样的问题,但是我没去测试,在写集合的时候一般List<>用的多点,所以经常碰 ...
- let命令和块级作用域
学习了阮一峰老师的ES6,http://es6.ruanyifeng.com/,收益良多. 一.let命令1.概念:let命令用于声明变量,和var类似,但是使用let命令所声明的变量只有在该变量所在 ...
- CentOS 7 Install Adobe Flash Player
From Officail Adobe Flash Site don't down (YUM )adobe-release-x86_64-1.0-1.noarch.rpm,but to downloa ...
- 使用kindeditor来替换ecshop的fckeditor编辑器,让ecshop可以批量上传图片
老杨原创 kindeditor此编辑器可以让ecshop批量上传图片,可以插入代码,可以全屏编辑,可以插入地图.视频,进行更多word操作,设置字体. 步骤一:进入kindeditor的官网,http ...