博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P1135 奇怪的电梯 【基础BFS】
阅读量:5288 次
发布时间:2019-06-14

本文共 1613 字,大约阅读时间需要 5 分钟。

题目链接:

题目描述

呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第 i 层楼 (1iN) 上有一个数字Ki(0KiN) 。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3,3,1,2,5 代表了Ki(K1=3,K2=3,) ,从 1 楼开始。在 1楼,按“上”可以到 4 楼,按“下”是不起作用的,因为没有 2 楼。那么,从 A 楼到 B 楼至少要按几次按钮呢?

输入格式:

共二行。

第一行为 3 个用空格隔开的正整数,表示N,A,B(1N200,1A,BN) 。

第二行为 N 个用空格隔开的非负整数,表示Ki 。

输出格式:

一行,即最少按键次数,若无法到达,则输出 1 。

输入样例#1: 
5 1 53 3 1 2 5
输出样例#1: 
3 裸的bfs
#include 
#include
#include
#include
using namespace std;int n, a, b;struct node{ int x, step;};int arr[210];int vis[210];queue
q;int bfs(){ node now, next; while (!q.empty()) { now = q.front(); q.pop(); if (now.x == b) { return now.step; } if (now.x + arr[now.x] <= 200 && !vis[now.x + arr[now.x]]) //向上坐电梯 { next.x = now.x + arr[now.x]; vis[next.x] = 1; next.step=now.step+1; q.push(next); } if (now.x - arr[now.x] >= 1 && !vis[now.x - arr[now.x]]) //向下坐电梯 { next.x = now.x - arr[now.x]; vis[next.x] = 1; next.step = now.step + 1; q.push(next); } } return -1;}int main(){ cin >> n >> a >> b; memset(vis, 0, sizeof(vis)); for (int i = 1; i <= n; i++) scanf("%d", &arr[i]); node now; now.x =a , now.step = 0; q.push(now); int ans=bfs(); cout << ans << endl; return 0;}

 

2018-05-31

转载于:https://www.cnblogs.com/00isok/p/9119753.html

你可能感兴趣的文章
sqlserver 行转列、列转行[转]
查看>>
【IScroll深入学习】解决IScroll疑难杂症
查看>>
python 数据类型
查看>>
108-PHP类成员protected和private成员属性不能被查看数值
查看>>
css控制height充满浏览器视口
查看>>
python学习之 - XML
查看>>
Python--GIL 详解
查看>>
大道至简读后感(第四章)
查看>>
IDA IDC Tutorials: Additional Auto-Commenting
查看>>
k8s-存储卷1-十二
查看>>
INSERT IGNORE INTO / REPLACE INTO
查看>>
Python数据类型-布尔/数字/字符串/列表/元组/字典/集合
查看>>
【刷题】SPOJ 705 SUBST1 - New Distinct Substrings
查看>>
IEEE 754浮点数表示标准
查看>>
declare 结构用来设定一段代码的执行指令
查看>>
图解算法读书笔记
查看>>
调试学习笔记
查看>>
解开lambda最强作用的神秘面纱
查看>>
Java基础:Object类中的equals与hashCode方法
查看>>
C#拦截Http请求
查看>>