#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <iterator>
#include <list>
#include <stack>
#include <queue>
using namespace std;
/*
T1 杭电1548
*/
int k[205];//每一层的数字
int n,a,b;
int step[205];
void bfs()
{
int t,na,nb;
queue <int> q;
q.push(a);
while(!q.empty())
{
t=q.front();//当前楼
q.pop();
if(t == b)
break;
na = t + k[t];//当前楼向上
nb = t - k[t];//当前楼向下
if( na>0 && na <=n &&step[na]==-1)
{
q.push(na);
step[na]=step[t] +1;//多走一步
}
if( nb>0 && nb <=n &&step[nb]==-1)
{
q.push(nb);
step[nb]=step[t] +1;
}
}
}
int main()
{
int i;
while(cin>>n && n!=0)
{
cin>>a>>b;
for(i=1;i<=n;i++)
cin>>k[i];
memset(step,-1,sizeof(step));
step[a]=0;
bfs();
cout<<step[b]<<endl;
}
return 0;
}
图论 BFS HDU 1548
最新推荐文章于 2018-03-14 10:09:45 发布