本文主要是介绍洛谷 P1135 奇怪的电梯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N=202;
int k[N],vis[N]; //k表示每层电梯上的数字;vis:标记数组;
int n,a,b,res=-1; //res表示结果;
struct node{int floor,step; //floor:当前位于第几层;step:从a层到达该层需要按的电梯次数;
};
int f[]={-1,1}; //-1:向下;1:向上;
queue<node> q;
void bfs();
int main(){scanf("%d %d %d",&n,&a,&b);for(int i=1;i<=n;i++){scanf("%d",&k[i]);}bfs();printf("%d\n",res);return 0;
}
void bfs(){//先判断起点和终点是否重合。 if(a==b){res=0;return;}vis[a]=1;node nod={a,0};q.push(nod);while(!q.empty()){nod=q.front();q.pop();int floor=nod.floor;int step=nod.step;for(int i=0;i<=1;i++){int nf=floor+(k[floor]*f[i]);if(nf<1 || nf>n){continue;}if(vis[nf]){continue;}if(nf==b){res=step+1;return;}vis[nf]=1;node nnod={nf,step+1};q.push(nnod);}}
}
这篇关于洛谷 P1135 奇怪的电梯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!