【题目】
https://www.luogu.com.cn/problem/P1135
【思路】
从起点开始,只要没越界就向上下搜,全部搜完得到答案 。注意剪枝。
【代码】
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int N, A, B, p[205], result = 0x7ffffff;
bool f[205];
void dfs(int now, int step) {
if (now == B) {
result = min(step, result);
return;
}
if (step > result) {
return;
}
f[now] = true;
if (now + p[now] <= N && !f[now + p[now]]) {
dfs(now + p[now], step + 1);
}
if (now - p[now] >= 1 && !f[now - p[now]]) {
dfs(now - p[now], step + 1);
}
f[now] = false;
}
int main() {
cin >> N >> A >> B;
for (int i = 1; i <= N; i++) {
cin >> p[i];
}
dfs(A, 0);
if (result == 0x7ffffff) {
cout << "-1" << endl;
}
else {
cout << result << endl;
}
return 0;
}