标签:least exist int 深搜 button name pac 16px ini
Input
The input consists of several test cases.,Each test case contains two lines.
The first line contains three integers N ,A,B( 1 <= N,A,B <= 200) which describe above,The second line consist N integers k1,k2,....kn.
A single 0 indicate the end of the input.
Output
For each case of the input output a interger, the least times you have to press the button when you on floor A,and you want to go to floor B.If you can‘t reach floor B,printf "-1".
Sample Input
5 1 5 3 3 1 2 5 0
Sample Output
3
题意:有一层楼有一架奇怪的电梯,这坐电梯在每层楼安排按钮,或上或下,并且上或下的楼层数是规定好了的为k[i],电梯的编号范围为1-n,每层电梯上或下规定的楼层数由数组k给出;现已知楼层数,起始楼层,目的楼层,以及数组k[i],求从起始楼层到目的楼层需要按几次电梯按钮。由于此处相当于求最优解,所以用广搜算法,而非深搜算法。
#include<cstdio> #include<algorithm> #include<queue> #include<iostream> using namespace std; int n,s,t,flag,ans; int k[210]; typedef pair<int,int>P; bool vis[210]; int main() { while(~scanf("%d",&n)&&n!=0){ scanf("%d%d",&s,&t); flag=0; ans=0; for(int i=1;i<=n;i++){ scanf("%d",&k[i]); vis[i]=false; } queue<P>q; q.push(P(s,0)); vis[s]=true; while(!q.empty()){ P top=q.front(); q.pop(); int a=top.first,b=top.second; if(a==t){ flag=1; ans=b; break; } int aa,bb; aa=a+k[a]; bb=a-k[a]; if(aa>=1&&aa<=n&&!vis[aa]){ q.push(P(aa,b+1)); vis[aa]=true; } if(bb>=1&&bb<=n&&!vis[bb]){ q.push(P(bb,b+1)); vis[bb]=true; } } if(flag==1) printf("%d\n",ans); else printf("-1\n"); } return 0; }
标签:least exist int 深搜 button name pac 16px ini
原文地址:https://www.cnblogs.com/LJHAHA/p/11164599.html