洛谷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\)表示层数, ...
随机推荐
- WPF制作带明细的环形图表
效果 明细用Popup实现的,录gif时,Popup显示不出来,不知道为什么,所以静态图凑合看吧 大体思路 图表使用Arc+Popup实现 图表分为两部分,一是环形部分,一是标注的明细部分. 环形部分 ...
- webpack教程(五)——图片的加载
首先安装的依赖 npm install file-loader --save-devnpm install image-webpack-loader --save-devnpm install url ...
- DevOps知识地图实践指南
DevOps知识地图 DevOps方法论的主要来源是Agile, Lean 和TOC, 独创的方法论是持续交付. DevOps经典图书: * <DevOps实践指南> * <持续 ...
- 计算机网络什么是OSI7层模型、TCP/IP4层模型理解
模型图解 应用层 就是最顶层的.通常指的应用程序初始走的协议比如有 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 表示层 主要对数据应用层的数据包进行加密 会话层 建立.管理. ...
- Centos6.5网络配置
由于项目部署的需要,不得不继续研究Linux,前期看过一些Linux方面的资料,也动手配置过Linux网络配置,但是由于开发项目一般在windows下进行的,用Linux比较少,所以基本上也就忘记以前 ...
- Python_函数_复习_习题_24
# 函数 # 可读性强 复用性强# def 函数名(): # 函数体 #return 返回值# 所有的函数 只定义不调用就一定不执行 #先定义后调用 #函数名() #不接收返回值#返回值 = 函数名( ...
- 第十次Scrum meeting
第十次Scrum meeting 任务及完成度: 成员 1.2 1.3 陈谋 任务1040:完成stackoverflow的数据处理后的json处理(100%) 任务1114-2:完成对pdf.pp ...
- PAT 1057 数零壹
https://pintia.cn/problem-sets/994805260223102976/problems/994805270914383872 给定一串长度不超过 105 的字符串, ...
- fetch 代替 XMLHttpRequest (json-server 模拟后台接口)
一.fetch 是 XMLHttpRequest 的替代方案.说白了就是除了 ajax 获取后台数据之外也可以用fetch 来获取. 二.fetch 的支持性还不是很好.挂载于BOM中可以通过浏览器直 ...
- [读书笔记]Linux命令行与shell编程读书笔记01
1. Linux的组成部分 1)linux内核(kernel) 2)GNU工具链 3)GUI/CLI工作几面(shell) 4)应用程序(app) 2Linux内核的主要工作: 1) 管理内存 2)管 ...