题目描述:

思路:
见代码注释
AC代码:

#include <bits/stdc++.h>
using namespace std;
int n, A, B;
int t[250]; //记录到达每层所用的最短时间
int a[250];
void dfs(int lou, int sum) {
	//lou是当前的楼层数,sum为当前按键次数
	t[lou] = sum;   //先进行赋值
	//下
	if (lou - a[lou] > 0 && sum + 1 < t[lou-a[lou]]) {
		dfs(lou - a[lou], sum + 1);
	}
	//上
	if (n >= a[lou] + lou && sum + 1 < t[lou+a[lou]]) {
		dfs(lou + a[lou], sum + 1);
	}
}
int main() {
	std::ios::sync_with_stdio(false); 
	//减少cin和cout的用时
	memset(t, 0x7f7f7f7f, sizeof(t));
	//0x7f7f7f7f为int型最大值
	cin >> n >> A >> B;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	dfs(A, 0);
	//若t[B]的值没有改变即从未到达B楼层
	if (t[B] == 0x7f7f7f7f) {
		cout << -1;
		return 0;
	}
	cout << t[B];
	return 0;
}





![[C语言][数据结构][链表] 单链表的从零实现!](https://img-blog.csdnimg.cn/direct/81f4f5409c814fe2a26c22c12cdd327c.png)












