hdu 1548

 1 #include<iostream>
 2 #include<queue>
 3 using namespace std;
 4 
 5 int n,a,b;
 6 
 7 int map[205],vis[205];
 8 
 9 void bfs(int s,int e)
10 {
11   queue<int> q;
12   q.push(s);
13   vis[s]=1;//标记 
14   int t;//用于保存首元素 
15   while(!q.empty())
16   {
17     t=q.front();//获取第一个元素 
18     q.pop();//将第一个元素弹出,首元素变成第二个 
19     if(t==e) 
20     break;//若是满足条件则跳出
21 
22     int next=t+map[t];//向上走 
23     if(next>=1 && next<=b && vis[next]==0)
24     {
25       q.push(next);
26       vis[next]=vis[t]+1;
27     }
28 
29     next=t-map[t];//向下走 
30     if(next>=1 && next<=b && vis[next]==0)
31     {
32       q.push(next);
33       vis[next]=vis[t]+1;
34     }
35   }
36   if(t!=e)
37   vis[b]=0;
38 }
39 
40 int main()
41 {
42   while(cin>>n && n)
43   {
44     cin>>a>>b;
45     for(int i=1;i<=n;i++)
46     cin>>map[i];
47     memset(vis,0,sizeof(vis));
48     bfs(a,b);
49     cout<<vis[b]-1<<endl;    
50   }
51   return 0;
52 }

 

posted @ 2015-07-30 16:50  澧浦  阅读(128)  评论(0)    收藏  举报