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