5 1 5 3 3 1 2 5
3
题目还是比较简单
我们使用dfs来解答,很容易发现实际上就是找最短路,路径长度的值可以抽象为每次增加的操作数,即均为1。
1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 int n,a,b,ans=0x7ffffff; 5 int to[205]; 6 bool vis[205]; 7 void dfs(int now,int sum) 8 { 9 if(now==b) ans=min(ans,sum); 10 if(sum>ans) return; 11 vis[now]=1; 12 if(now+to[now]<=n&&!vis[now+to[now]]) dfs(now+to[now],sum+1); 13 if(now-to[now]>=1&&!vis[now-to[now]]) dfs(now-to[now],sum+1); 14 vis[now]=0; 15 } 16 int main() 17 { 18 scanf("%d%d%d",&n,&a,&b); 19 for(int i=1;i<=n;i++) scanf("%d",&to[i]); 20 vis[a]=1; 21 dfs(a,0); 22 if(ans!=0x7ffffff) printf("%d",ans); 23 else printf("-1"); 24 return 0; 25 }