您的位置:首页 > 其它

1014-A strange lift

2016-04-21 23:47 183 查看
同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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  搜索