#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int n,a[220],A,B,v[210];
struct node
{
int re,step;
}cur,next;
void bfs(int t)
{
cur.re=t;cur.step=0;
queue<node>q;
q.push(cur);
while(!q.empty())
{
cur=q.front();
q.pop();
if(cur.re==B)
{
printf("%d\n",cur.step);
return ;
}
if(cur.re+a[cur.re]<=n&&!v[cur.re+a[cur.re]])
{
next.re=cur.re+a[cur.re];
next.step=cur.step+1;
v[cur.re+a[cur.re]]=1;
q.push(next);
}
if(cur.re-a[cur.re]>0&&!v[cur.re-a[cur.re]])
{
next.re=cur.re-a[cur.re];
next.step=cur.step+1;
v[cur.re-a[cur.re]]=1;
q.push(next);
}
}
printf("-1\n");
}
int main()
{
int i;
while(scanf("%d",&n),n)
{
memset(v,0,sizeof(v));
scanf("%d%d",&A,&B);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
v[A]=1;
bfs(A);
}
return 0;
}
hdu 1548(bfs)
最新推荐文章于 2018-06-06 10:04:42 发布
本文介绍了一个基于广度优先搜索(BFS)算法的应用案例。通过使用C++实现,该程序解决了一个从起点到终点的最短步数问题。具体地,它在一个整数数组中寻找从A到B的最短路径,每一步可以向前或向后跳过数组中指定位置的数值。文章提供了完整的源代码,并展示了如何利用队列来遍历所有可能的状态。
1677

被折叠的 条评论
为什么被折叠?



