HDU 1548 A strange lift

来源:互联网 发布:软件专利说明书范文 编辑:程序博客网 时间:2024/06/16 23:50
//搜索注意已搜索标记,第一次忘了判断,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");}}