只正确2个点其它MLE 求debug
/*
本题采用dfs
每次dfs两种可能,上或下,并记录step
当达到目标楼层时记ans为ans与step的最小值
dfs参数带有当前楼层(floor),当前步数(step)
*/
#include <bits/stdc++.h>
using namespace std;
const int maxint = 2 * 1e9;
long long ans = maxint;
long long n, startfloor, finshfloor;
long long k[500];
void dfs(int floor, long long step)
{
if (floor == finshfloor)
{
ans = min(ans, step);
return;
}
if ((floor + k[floor]) <= n)
{
dfs(floor + k[floor], step + 1);
}
if (floor != 1 && (floor - k[floor]) > 0)
dfs(floor - k[floor], step + 1);
return;
}
int main()
{
cin >> n >> startfloor >> finshfloor;
for (int i = 1; i <= n; i++)
{
cin >> k[i];
}
dfs(startfloor, 0);
if (ans == maxint)
cout << -1 << endl;
else
cout << ans << endl;
}