您的位置:首页 > 其它

HDU 1548 A strange lift

2017-07-21 15:10 204 查看
//搜索注意已搜索标记,第一次忘了判断,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 搜索