题目链接:传送门(点我)
以此状态广搜,生成解答树,向上或者向下后生成新的状态,基本上就是广搜模板。
#include<bits/stdc++.h>
using namespace std;
#define MAXN 210
int n;
int dir[2]={1,-1},k[MAXN];
bool vis[MAXN];
struct pos{
int f;//floor
int step;
}st,en;//start end
queue<pos>q;
int main()
{
cin>>n>>st.f>>en.f;
st.step=0;q.push(st);//start
en.step=-1;//end
for(int i=1;i<=n;i++)cin>>k[i];
while(q.size()!=0){
pos t = q.front();
q.pop();
if(t.f==en.f){
en.step=t.step;
break;
}
for(int i=0;i<2;i++){
pos z;
z.f=t.f+dir[i]*k[t.f];z.step=t.step+1;
if(z.f<1||z.f>n||vis[z.f])continue;
vis[z.f]=1;
q.push(z);
}
}
return cout<<en.step<<endl,0;
}