题目解析:一般的广搜,枚举所有的状态就可以了。
代码如下:
#include<stdio.h> #include<string.h> #include<queue> using namespace std; int lift[205]; int vis[205]; int s,t,n; struct node { int cur; int time; }; void bfs() { memset(vis,0,sizeof(vis)); node node1,node2; queue<node>q; node1.cur=s; node1.time=0; q.push(node1); vis[node1.cur]=1; while(!q.empty()) { node2=q.front(); q.pop(); if(node2.cur==t) { printf("%d\n",node2.time); return ; } node1.cur=node2.cur+lift[node2.cur]; if(node1.cur>=1&&node1.cur<=n&&!vis[node1.cur]) { node1.time=node2.time+1; q.push(node1); vis[node1.cur]=1; } node1.cur=node2.cur-lift[node2.cur]; if(node1.cur>=1&&node1.cur<=n&&!vis[node1.cur]) { node1.time=node2.time+1; q.push(node1); vis[node1.cur]=1; } } printf("-1\n"); } int main() { while(scanf("%d",&n)!=EOF&&n) { scanf("%d%d",&s,&t); for(int i=1;i<=n;i++) scanf("%d",&lift[i]); bfs(); } return 0; }