1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #include <bits/stdc++.h> using namespace std; int b(int n,int a,int target,int k\[]) { bool v\[n+1]={false}; queue<int>q; q.push(a); int steps\[n+1]={0}; v\[a]=true; while(!q.empty()) { int c=q.front(); q.pop(); if (c==target) { return steps\[c]; } if(c+k\[c-1]<=n \&\& !v\[c+k\[c-1]]) { v\[c+k\[c-1]]=true; steps\[c+k\[c-1]]=steps\[c]+1; q.push(c+k\[c-1]); } if(c-k\[c-1]>=1 \&\& !v\[c-k\[c-1]]) { v\[c-k\[c-1]]=true; steps\[c-k\[c-1]]=steps\[c]+1; q.push(c-k\[c-1]); } } return -1; }
int main() { int n,a,tctm; cin>>n>>a>>tctm; int k\[n]; for(int i=0;i<n;i++) { cin>>k\[i]; }
int r=b(n,a,tctm,k); cout<<r; return 0; }
|