好,这是一道黄题。几个月前(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例题的更多相关文章

  1. 【DFS与BFS】洛谷 P1135 奇怪的电梯

    题目:奇怪的电梯 - 洛谷 (luogu.com.cn) 因为此题数据范围较小,有dfs及bfs等多种做法. DFS 比较正常的dfs,注意vis数组一定要回溯,不然会漏情况 例如这个数据 11 1 ...

  2. 洛谷 P1135 奇怪的电梯 【基础BFS】

    题目链接:https://www.luogu.org/problemnew/show/P1135 题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第 i 层 ...

  3. TYVJ P3522 &&洛谷 P1135 奇怪的电梯 Label:bfs

    题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开 ...

  4. 洛谷P1135 奇怪的电梯

    题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼 (1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮: ...

  5. 洛谷 P1135 奇怪的电梯

    题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开 ...

  6. 洛谷 P1135 奇怪的电梯 (dfs)

    题目描述 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N).电梯只有四个按钮:开 ...

  7. 洛谷P1135 奇怪的电梯【bfs】

    题目:https://www.luogu.org/problemnew/show/P1135 题意: 一共有n层楼,在第i层可以往上或往下$k_i$层. 问从$a$层到$b$层至少需要多少乘多少次电梯 ...

  8. 集训作业 洛谷P1135 奇怪的电梯

    这个题我见过!!! 我之前在石油大学的网站上做练习赛,提高了很多,这个题是我第一次在比赛里见到深搜. 当时蒙蔽的一批,现在发现好简单…… 这个题和普通的深搜没什么区别,甚至可以说简单了,因为这个是1维 ...

  9. 洛谷 P1135 奇怪的电梯 (DFS)

    题意:有一\(n\)层高的大楼,每层楼都只能在合法情况下上\(x\)层或者下\(x\)层,问你是否能从\(a\)层楼坐电梯到\(b\)层楼,输出最小步数. 题解:直接dfs搜,\(flo\)表示层数, ...

随机推荐

  1. M1阶段个人总结

    经过4周的开发,我们团队的第一阶段已经结束了. 这一个月来我由于其他事情较多,所以开发的工作主要交给了另外的三名同学. 我主要负责制定代码规范和工程结构,通过github来跟进项目进度,提供一些技术支 ...

  2. 个人博客Week3——案例分析

    一.调研,评测 我使用的bing的WINDOWS客户端,其大致分为四个模块:词典.例句.翻译.应用. (1)“词典”模块 BUG:搜索”http“词条,界面显示http的相关,但是无法再回到最初的主界 ...

  3. BugPhobia开发终结篇章:Beta阶段第XI次Scrum Meeting

    0x01 :Scrum Meeting基本摘要 Beta阶段第十一次Scrum Meeting 敏捷开发起始时间 2015/01/06 00:00 A.M. 敏捷开发终止时间 2016/01/10 0 ...

  4. java中for循环的几种方式

    比如定义一个数组int a[]={1, 2, 3, 4},下面我们罗列一下遍历这个数组的方法 1 for(;;) 这也是最常用的方法,不多做解释.代码如下 int a[] = {1, 2, 3, 4} ...

  5. Socket、Session、Option和Pipe

    消息队列NetMQ 原理分析4-Socket.Session.Option和Pipe   消息队列NetMQ 原理分析4-Socket.Session.Option和Pipe 前言 介绍 目的 Soc ...

  6. Spring基础之 反射(Reflection)

    1.了解Class package com.inspire.reflection.Class_api; import java.lang.reflect.Constructor; import jav ...

  7. ionic3.x开发小坑记录(一)

    自定义font的时候,在assets中创建的文件夹名字别用fonts,会与ionic默认样式冲突,在浏览器中调试是正常的,到手机上就出问题了. 在html中写img的src直接如图  assets前面 ...

  8. python排序

    排序算法概览 归并排序的 空间复杂度为O(n) 插入排序 基本思想是每次讲一个待排序的记录,按其关键字大小插入到前面已拍好的子序列中,直到全部完成. 直接插入排序 讲元素L(i)插入到有序序列L[1, ...

  9. flask 即插视图(Pluggable Views)和endpoint

    endpoint经常使用flask的人肯定不会面生.其实我一直没有关注过他是怎么寻址的,直到最近经常食用url_for这个函数才引起了我的注意. url_for看源码感觉实现挺复杂的,我们姑且不在这里 ...

  10. awk、sed、grep三大shell文本处理工具之grep的应用

    1.基本格式grep pattern [file...](1)grep 搜索字符串 [filename](2)grep 正则表达式 [filename]在文件中搜索所有 pattern 出现的位置, ...