练习2————1014

来源:互联网 发布:数据备份 方案 编辑:程序博客网 时间:2024/05/20 03:45

题目: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;  


0 0
原创粉丝点击