简单的广搜,一开始没有把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