练习2————1014

题目:A strange lift


题意:在一个N层高的楼上有一个电梯,电梯只有上下两个方向,在i层只能上升或者下降一个特定的数ki,给定一个起始楼层,问是否能到达指定楼层。

思路:运用搜索的方法。

感想:BFS是求最短的最优办法

代码:

#include<queue>  
#include<iostream>  
using namespace std;  
int main()  

  int i,N,a,b,x,y;  
  bool v[201];  
  int k[201],s[201];
  queue<int>Q;
  while (cin>>N)  
  { 
 if(!N) break;
// Q.clear();
      memset(v,0,sizeof(v));
      memset(s,0,sizeof(s));
      scanf("%d%d",&a,&b);    
      for (i=1;i<=N;i++)  
 {  
        scanf("%d",&k[i]);   
 }  
      Q.push(a); 
 x=Q.front();
 v[x]=1; 
 while(x!=b)
 {
 y=k[x];
 if(x+y<=N&&!v[x+y])
 {
 v[x+y]=1;
 Q.push(x+y);
 s[x+y]=s[x]+1;
 }
 if(x-y>=1&&!v[x-y])
 {
 v[x-y]=1;
 Q.push(x-y);
 s[x-y]=s[x]+1;
 }
 Q.pop();
 if(Q.empty()) break;
 x=Q.front();
 }
 if(x==b) cout<<s[x]<<endl;
 else cout<<"-1"<<endl;
 }  
 return 0;  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值