请教一下各位大佬,不知道是不是我自己忽略了什么条件
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
int n,a,b,ans = 0;
constexpr int N = 10001;
int arr[N],flag[N],vis[N];
queue<int> Q;
int main()
{
cin >> n >> a >> b;
memset(flag,0,sizeof(flag));
memset(vis, 0, sizeof(vis)); // 初始化 vis 数组
for (int i = 1; i <= n; i++)
{
cin >> arr[i];
ans = 1;
}
Q.push(a);
vis[a] = 1; // 将起点标记为已访问
while(!Q.empty())
{
int item = Q.front();
int up = item + arr[item];
int down = item - arr[item];
Q.pop();
if (item == b)
{
cout << flag[item];
ans = 1;
break;
}
if (up >= 1 && up <= n && !vis[up]) // 判断 up 是否合法且未被访问
{
vis[up] = 1;
Q.push(up);
flag[up] = flag[item] + 1;
}
if (down >= 1 && down <= n && !vis[down]) // 判断 down 是否合法且未被访问
{
vis[down] = 1;
Q.push(down);
flag[down] = flag[item] + 1;
}
}
if (!ans)
{
cout << -1;
}
return 0;
}