0
点赞
收藏
分享

微信扫一扫

奇怪的电梯

GG_lyf 2022-03-14 阅读 89
c++

题目描述
​ 一栋有 N 层的大楼中有一部奇怪的电梯,每层只有上下两个钮,且第 i 层只能一次性上或下 Xi 层(若下 Xi 层后,层数小于 1 ,则不可进行下楼操作,同理有些层也不可进行上楼操作),小明现在在 A 层,他想去 B 层,求他需要的最少操作次数,若无法到达,则输出 −1。

输入
​ 第一行输入三个整数 N,A,B。(1≤A,B≤N≤200)
​ 接下来 N 行,每行一个数表示 Xi。(1≤Xi≤N)
输出
​ 输出最小操作次数,若无法抵达则输出 −1。

样例输入
5 1 5
3
3
1
2
5
样例输出
3
数据规模与约定
​ 时间限制:1 s

​ 内存限制:256 M

​ 100% 的数据保证 1≤A,B≤N≤200

#include <iostream>
#include <queue>
using namespace std;

struct node {
	int level, step;
};
int main() {
	int n, a, b;
	cin >> n >> a >> b;
	if (a == b) {
		cout << 0 << endl;
		return 0;
	}
	queue<node> que;
	int num[205] = { 0 },mem[205]={0};
	for (int i = 1; i <= n; i++) {
		cin >> num[i];
	}
	que.push({ a,0 });
		mem[a] = 1;
		while (!que.empty()) {
			node temp = que.front();
			que.pop();
			int up = temp.level + num[temp.level];
			int down = temp.level - num[temp.level];
			if (up >= 1 && up <= n) {
				if (up == b) {
					cout << temp.step + 1 << endl;
					return 0;
				}
				if (!mem[up]) {
					mem[up] = 1;
					que.push({ up,temp.step + 1 });
				}
			}
			if (down >= 1 && down <= n) {
				if ( down == b) {
					cout << temp.step + 1 << endl;
					return 0;
				}
				if (!mem[down]) {
					mem[down] = 1;
					que.push({ down,temp.step + 1 });
				}
			}
		}
	cout << -1 << endl;
	return 0;
}
举报

相关推荐

0 条评论