hdu1548

来源:互联网 发布:linux 关闭防火墙命令 编辑:程序博客网 时间:2024/05/29 19:25
#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<queue>using namespace std;int s[205];int vis[205];int n,a,b;struct node{int x;//当前层数 int step;//按的次数 };int bfs(){queue<node>q;node c,next;c.x=a;c.step=0;vis[c.x]=1;int i;q.push(c);while(!q.empty()){c=q.front();q.pop();if(c.x==b)return c.step;next=c;next.x=next.x+s[next.x];if((vis[next.x]==0)&&(next.x>0)&&(next.x<=n)){vis[next.x]=1;next.step++;q.push(next);}next=c;next.x=next.x-s[next.x];if((vis[next.x]==0)&&(next.x>0)&&(next.x<=n)){vis[next.x]=1;next.step++;q.push(next);}}return -1; }int main(){while(scanf("%d",&n)!=EOF){if(n==0)break;scanf("%d%d",&a,&b);int i;memset(vis,0,sizeof(vis));for(i=1;i<=n;i++){scanf("%d",&s[i]);}printf("%d\n",bfs());}return 0;} 

原创粉丝点击