坐电梯 只能上和下,走过的楼层是当前所存数乘以1或者-1
题目链接:点击打开链接
AC代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#define MM(x,y) memset(x,y,sizeof(x))
using namespace std;
const int N=300;
int a[N];
struct node{
int x;
long long step;
};
queue<node>Q;
int vis[N];
int t,p,n;
int bfs()
{
node now,next;
int i;
now.step=0;
now.x=t;
Q.push(now);
vis[t]=1;
while(!Q.empty())
{
now=Q.front();
Q.pop();
if(now.x==p)
return now.step;
next.x=now.x+a[now.x];
if(next.x>0&&next.x<=n&&!vis[next.x])
{
next.step=now.step+1;
Q.push(next);
vis[next.x]=1;
}
next.x=now.x-a[now.x];
if(next.x>0&&next.x<=n&&!vis[next.x])
{
next.step=now.step+1;
Q.push(next);
vis[next.x]=1;
}
}
return -1;
}
int main()
{
int i,j,sum;
while(cin>>n&&n)
{
while(!Q.empty())
{
Q.pop();
}
cin>>t>>p;
MM(vis,0);
for(i=1;i<=n;i++)
cin>>a[i];
cout<<bfs()<<endl;
}
return 0;
}