洛谷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\)表示层数, ...
随机推荐
- 过渡与动画 - 逐帧动画&steps调速函数
写在前面 上一篇中我们熟悉五种内置的缓动曲线和(三次)贝塞尔曲线,并且基于此完成了缓动效果. 但是如果我们想要实现逐帧动画,基于贝塞尔曲线的调速函数就显得有些无能为力了,因为我们并不需要帧与帧之间的过 ...
- 从0到1上线一个微信小程序
0.0 前期准备 微信小程序的出现极大地降低了个人开发者微创业的门槛,不需要后端技术,不需要服务器和域名这些乱七八糟的前置操作,只需要懂得前端技术,就能发布一款属于自己的轻量级应用,简直是前端开发者的 ...
- [T-ARA][떠나지마][不要离开]
歌词来源:http://music.163.com/#/song?id=22704408 잊기엔 너무 사랑했나봐 [id-ggi-en neo-mu sa-lang-haen-na-bwa] 아직도 ...
- Dubbo原理和源码解析之服务暴露
github新增仓库 "dubbo-read"(点此查看),集合所有<Dubbo原理和源码解析>系列文章,后续将继续补充该系列,同时将针对Dubbo所做的功能扩展也进行 ...
- 《移山之道》Reading Task
老师布置的阅读任务虽然是附加的作业,但是对我来说是个很好的学习机会.软件工程主要是对工程的开发进行学习,毕竟在学校老师教了那么多的知识,我们课下做了那么多的练习并没有提高我们做一个工程的能力.一个项目 ...
- Windows10安装ubuntu & caffe GPU版
1.Ubuntu https://www.cnblogs.com/EasonJim/p/7112413.html https://blog.csdn.net/jesse_mx/article/deta ...
- /var/lib/mysql 的访问权限问题 Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
mysql 登录不进去 提示Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) she ...
- 请求数据传入(SpringMVC)
1. 请求处理方法签名 Spring MVC 通过分析处理方法的签名,HTTP请求信息绑定到处理方法的相应人参中. Spring MVC 对控制器处理方法签名的限制是很宽松的,几乎可以按喜欢的任 ...
- Delphi7通过superobject解析JSON
1.通过delphi程序访问PHP事先写好的webservice(查询功能),webservice返回json格式数据. 2.通过superobject读取json数据 得到效果如下: //深层级的访 ...
- FICO基础知识(三)
成本中心: 成本中心是企业内的最小职责单位,是每一笔费用的具体接收者.创建成本中心主数据时必须将每个成本中心分配给标准层次结构的某个节点,标准层次结构反映了成本中心与成本中心.成本中心与成本中心组.成 ...