还是队列用着不错,
一下AC了。。。
挺简单的,把所有可能全部遍历一遍,最后取最优解。。
和hdu(2717)Catch That Cow一样的方法。。
#include"stdio.h"
#include"string.h"
#include"queue"
using namespace std;
int visit[210];
int p[210];
int n,a,b;
struct point
{
int x,y;
int step;
};
int bfs()
{
queue<point>q;
point cur,next;
cur.x=a,cur.step=0;
q.push(cur);
visit[a]=1;
while(!q.empty())
{
next=q.front();
q.pop();
if(next.x==b)
return next.step;
else
{
cur.x=next.x+p[next.x];
if(cur.x<=n&&visit[cur.x]==0)
{
visit[cur.x]=1;
cur.step=next.step+1;
q.push(cur);
}
cur.x=next.x-p[next.x];
if(cur.x>=1&&visit[cur.x]==0)
{
visit[cur.x]=1;
cur.step=next.step+1;
q.push(cur);
}
}
}
return -1;
}
int main()
{
int i;
while(scanf("%d%d%d",&n,&a,&b),n)
{
for(i=1;i<=n;i++)
scanf("%d",&p[i]);
memset(visit,0,sizeof(visit));
printf("%d\n",bfs());
}
return 0;
}