边界
假设起始点是第五层,第五层的k值是5,那么就只能向上跳,不能向下跳,因为会越界.
#include <bits/stdc++.h>
using namespace std;
int n, A, B;
const int N = 1e6 + 10;
int k[N], dist[N];
vector<int> g[N]; //表示从当前层可以走到的层
queue<int>q;
int main() {
cin >> n >> A >> B;
for (int i = 1; i <= n; i++) {
cin >> k[i];
//从第i层向上可以走到哪一层,向下可以走到哪一层
if (i + k[i] <= n)
g[i].push_back(i + k[i]);
if (i - k[i] > 0)
g[i].push_back(i - k[i]);
}
q.push(A);
while (!q.empty()) {
int u = q.front();
q.pop();
//遍历队头层可以到达的层
for (int i =0; i < g[u].size(); i++) {
int v = g[u][i]; //从队头层可以走到的层
if (dist[v]) //如果已经走过
continue;
dist[v] = dist[u] + 1; //走到当前层 步数+1
q.push(v);
}
}
if (dist[B])
cout << dist[B] << endl;
else
cout << "-1" << endl;
return 0;
}