原題見上一篇博文:奇怪的電梯題目以及dfs解法
代碼:
#include<bits/stdc++.h>
using namespace std;
int n,A,B,cnt,s;
int k[210];
bool b[210]={0};//標記樓層是否已經走過
int d[2]={1,-1};//上樓加,下樓減
struct node{
int d;
int step;
}a[200000],y,next;
//第一次是三個沒過
//改完,第二次是2個沒過
//繼續改遇到瓶頸了 ,反覆看了好久才發現問題在哪裏,
//應該是y=a[front++],但是卻寫成了y.d=a[front++].d,相當於每次step都沒給數值所以纔會出錯的啊
int bfs(int x,int step)
{
int front=0,rear=0;
a[rear].d=x;
a[rear].step=step;
rear++;
b[x]=false;
while(rear!=front){
y=a[front++];
if(y.d==B) return y.step;
if(y.d+k[y.d] <=n && b[y.d+k[y.d]]) {
b[y.d+k[y.d]]=false;
next.d=y.d+k[y.d];
next.step=y.step+1;
a[rear++]=next;
}
if(y.d-k[y.d]>=1 && b[y.d-k[y.d]]) {
b[y.d-k[y.d]]=false;
next.d=y.d-k[y.d];
next.step=y.step+1;
a[rear++]=next;
}
}
return -1;
}
int main(){
cin>>n>>A>>B;
memset(b,true,sizeof(b));
for(int i=1;i<=n;i++) cin>>k[i];
if(A==B) cnt=0;//注意:如果當前樓層和要到達的樓層是一樣的cnt=0
else cnt=bfs(A,0);
cout<<cnt;
return 0;
}