1014-A strange lift

来源:互联网 发布:java object转为实体类 编辑:程序博客网 时间:2024/06/11 19:48

同1013-A strange lift题

1.题号:1014-A strange lift

2.题意:电梯:输入:n个楼层,起始楼层,终止楼层。之后n个数据是每个楼层的可移动层数,既是可上可下的层数,固定的。

3.思路:用队列,从开始就2个选择,上或者下,,,限制条件是《0或者》n或者走过这层了。首先用个数组储存每个楼层的数字。从开始楼层开始广搜,压缩进队列去,下个状态,判断,可以则继续压缩,取出,再压缩,直到队列为空或者在中间就找到目标,则输出步数或-1。

4.感想:挺有意思的一个题,思路很简单。

5.AC代码:

#include <iostream>#include <cstring>#include <queue>using namespace std;int arr[205],brr[205];int start,finish,n;struct dianti{  int lift,step;};int bfs(void){  dianti t,k;  queue <dianti> q;  memset(brr,0,sizeof(brr));  t.lift=start;  t.step=0;  brr[t.lift]=1;  q.push(t);  while(!q.empty())  {    t=q.front();    q.pop();    if(t.lift==finish)       return t.step;    k.lift=t.lift-arr[t.lift];    if(k.lift>0 && k.lift<=n && !brr[k.lift])    {      k.step=t.step+1;      brr[t.lift]=1;      q.push(k);    }    k.lift=t.lift+arr[t.lift];    if(k.lift>0 && k.lift<=n && !brr[k.lift])    {      brr[t.lift]=1;      k.step=t.step+1;      q.push(k);    }  }  return -1;}int main(){  int i;  while(cin>>n)  {    if(n==0)       break;   else       {    cin>>start>>finish;    for(i=1;i<=n;++i)       cin>>arr[i];    cout<<bfs()<<endl;       }  }  return 0;}

0 0
原创粉丝点击