链接:Problem - 1548 (hdu.edu.cn)
问题描述:
题目大意:
一开始在某一层,然后根据某一层的ki上升或下降电梯,如果能到达目标层,则输出用的次数,如果不能到达则输出 -1.
解题思路:
运用bfs,将此问题编程图的问题。
代码实现:
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
int n,start,target;
int a[202],vis[202];//vis用来做标记
struct pos{
int level;
int step;
};
void bfs(){
pos cur,nex;
cur.level =start;
cur.step = 0;
queue <pos> qu;
qu.push(cur);
vis[start] = 1;
while(!qu.empty()){
cur =qu.front();
qu.pop();
if(cur.level == target){
printf("%d\n",cur.step);
return;
}
nex.level=cur.level+a[cur.level];
nex.step=cur.step+1;
if(nex.level<=n){
if(vis[nex.level]==0){
vis[nex.level] =1;
qu.push(nex);
}
}
nex.level=cur.level-a[cur.level];
nex.step=cur.step+1;
if(nex.level>=1){
if(vis[nex.level]==0){
vis[nex.level] =1;
qu.push(nex);
}
}
}
printf("-1\n");
return;
}
int main(){
while(scanf("%d",&n)==1){
if(n== 0) break;
scanf("%d %d",&start,&target);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
vis[i]=0;
}
bfs();
}
return 0;
}