下载了第一个数据,运行结果比要求大1
#include <iostream>
using namespace std;
int n,a,b,floor;
int k[210];
bool st[210]; //记录是否到达过某层
int minn = 999999;
void dfs(int x)
{
if (x > 1000 || x > minn)
{
return;
}
if (floor == b)
{
minn = min(minn,x);
return;
}
int temp = floor;
floor += k[floor];
if (floor <= n && st[floor] == false)
{
st[floor] = true;
dfs(x+1);
st[floor] = false;
}
floor = temp;
floor -= k[floor];
if (floor >= 1 && st[floor] == false)
{
st[floor] = true;
dfs(x+1);
st[floor] = false;
}
}
int main()
{
cin >> n >> a >> b;
floor = a;
st[a] = true;
for (int i = 1 ; i <= n ; i++)
{
cin >> k[i];
}
dfs(0);
if (minn == 999999)
{
cout << -1 << endl;
}
else
{
cout << minn << endl;
}
}
想了一个下午一直搞不明白