好,这是一道黄题。几个月前(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. 线上分享-- 基于DDD的.NET开发框架-ABP介绍

    前言 为了能够帮助.Net开发者开拓视野,更好的把最新的技术应用到工作中,我在3月底受邀到如鹏网.net训练营直播间为各位学弟学妹们进行ABP框架的直播分享.同时为了让更多的.NET开发者了解ABP框 ...

  2. 基于DDD的.NET开发框架ABP实例,多租户 (Saas)应用程序,采用.NET MVC, Angularjs, EntityFramework-介绍

    介绍 基于ABPZERO的多租户 (Saas)应用程序,采用ASP.NET MVC, Angularjs-介绍 ASP.NET Boilerplate作为应用程序框架. ASP.NET MVC和ASP ...

  3. Webpack 2 视频教程

    这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲解的. 这个基本就是目前 ...

  4. 路由嵌套 active

    http://www.jb51.net/article/102574.htm; https://segmentfault.com/q/1010000008950255 <el-menu :def ...

  5. Scrum Meeting NO.9

    Scrum Meeting No.9 1.会议内容 2.任务清单 徐越 序号 近期的任务 进行中 已完成 1 代码重构:前端通讯模块改为HttpClient+Json √ 2 "我" ...

  6. Linux内核设计与实现 第十七章

    1. 设备类型 linux中主要由3种类型的设备,分别是: 设备类型 代表设备 特点 访问方式 块设备 硬盘,光盘 随机访问设备中的内容 一般都是把设备挂载为文件系统后再访问 字符设备 键盘,打印机 ...

  7. python语言几个常见函数的使用

    写代码,有如下变量,请按照要求实现每个功能: name = " Kobe Bean Bryant" a. 移除 name 变量对应的值左边的空格,并输出移除后的内容 name = ...

  8. 第二个spring,第三天

    陈志棚:成绩的统筹 李天麟:界面音乐 徐侃:代码算法 给位组员继续的完成分配任务.

  9. 自定义视图(SpringMVC)

    一.首先理解视图的解析过程 1)请求处理方法执行完成后,最终返回一个 ModelAndView 对象. ModelAndView 对象,它包含了逻辑名(访问URL)和模型对象(javaBean数据)的 ...

  10. opencv学习笔记(二)

    摘要:学习资料主要参考于毛星云主编<opencv3编程入门> 1.图像显示 #include<opencv2/opencv.hpp> using namespace cv; / ...