简单的广搜,一开始没有把re初始化,wa了好多次
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int n,a,b;
int mapp[200+5];
int visit[200+5];
int re=-1;
struct stu
{
int s,t;
};
void bfs(int h)
{
stu x,y;
queue<stu>root;
x.s=h;
x.t=0;
root.push(x);
visit[x.s]=1;
while(root.size())
{
x=root.front();
root.pop();
if(x.s==b){re=x.t;return;}
if(x.s+mapp[x.s]>0&&x.s+mapp[x.s]<=n&&!visit[x.s+mapp[x.s]]) y.s=x.s+mapp[x.s],y.t=x.t+1,root.push(y),visit[y.s]=1;
if(x.s-mapp[x.s]>0&&x.s-mapp[x.s]<=n&&!visit[x.s-mapp[x.s]]) y.s=x.s-mapp[x.s],y.t=x.t+1,root.push(y),visit[y.s]=1;
}
}
int main()
{
while(cin>>n&&n)
{
cin>>a>>b;
memset(mapp,0,sizeof(mapp));
memset(visit,0,sizeof(visit));
re=-1;
for(int i=1;i<=n;i++)
{
cin>>mapp[i];
}
bfs(a);
cout<<re<<endl;
}
return 0;
}
原文:http://blog.csdn.net/zafkiel_nightmare/article/details/44783855