//搜索注意已搜索标记,第一次忘了判断,wa了
// 第二次判断写错,
#include<stdio.h>
#include <string.h>
#include <queue>
using namespace std;
struct node{
int pos;
int step;
node(int _pos, int _step):pos (_pos) ,step(_step) {
}
};
const int maxn = 1e3 + 5;
int vis[maxn]; //
int k[maxn];
int main(){
int n, a, b, ans = 0;
while (scanf("%d", &n) != EOF && n != 0){
scanf("%d%d",&a, &b);
for (int i = 1; i <= n; i++){
scanf("%d", &k[i]);
}
memset(vis,0,sizeof(vis));
queue <node> que;
que.push(node(a,0));
ans = 0;
while (!que.empty() ){
node tem = que.front() ;
if (tem.pos == b) break;
vis[tem.pos ] = 1;
que.pop() ;
if (tem.pos + k[tem.pos ] <= n && vis[tem.pos + k[tem.pos ]] == 0) {
que.push(node(tem.pos + k[tem.pos ], tem.step + 1)) ;
}
if (tem.pos - k[tem.pos ] >= 1 && vis[tem.pos - k[tem.pos ]] == 0){
que.push(node(tem.pos - k[tem.pos ], tem.step + 1));
}
}
if (!que.empty() ){
printf("%d\n", que.front() .step);
}
else printf("-1\n");
}
}
HDU 1548 A strange lift
最新推荐文章于 2020-04-13 23:06:39 发布