标签:cond problem tput sed tran isp single input size
InputThe 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.OutputFor 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
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<string> #include<vector> #include<stack> #include<bitset> #include<cstdlib> #include<cmath> #include<set> #include<list> #include<deque> #include<map> #include<queue> #define ll long long #define inf 0x3fffffff using namespace std; struct Node { int floor; int step; }; int f[205]; int vis[205]; int dir[2]={-1,1}; int n,a,b; queue<Node> q; int bfs() { while(!q.empty()) q.pop(); q.push(Node{a,0}); while(!q.empty()) { Node tmp; Node u=q.front(); q.pop(); if(u.floor==b)//到达 { return u.step; } for(int i=0;i<2;i++) { tmp.floor=u.floor+f[u.floor]*dir[i]; tmp.step=u.step+1; if(tmp.floor>=1&&tmp.floor<=n&&!vis[tmp.floor]) { vis[tmp.floor]=1; q.push(tmp); } } } return -1; } int main() { while(~scanf("%d",&n)&&n) { scanf("%d%d",&a,&b); memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) scanf("%d",&f[i]); printf("%d\n",bfs()); } return 0; }
标签:cond problem tput sed tran isp single input size
原文地址:http://www.cnblogs.com/Roni-i/p/7406277.html