宽搜模板题,好久不写已经快忘记怎么写了
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
const int INF = 0x3f3f3f3f;
int arr[205], d[205];
int n, a, b;
int bfs()
{
queue<int> que;
memset(d, INF, sizeof d);
que.push(a);
d[a] = 0;
while (que.size()){
int p = que.front(); que.pop();
if (p == b) break;
for (int i = 0; i < 2; i++){
int np;
if (i == 0) np = p - arr[p];
else np = p + arr[p];
if (1 <= np && np <= n && d[np] == INF){
que.push(np);
d[np] = d[p] + 1;
}
}
}
return d[b];
}
int main(void)
{
cin >> n >> a >> b;
for (int i = 1; i <= n; i++)
cin >> arr[i];
int ans = bfs();
if (ans == INF)
cout << "-1" << endl;
else
cout << ans << endl;
return 0;
}