P1135奇怪的电梯
一.题目描述:
二.解题思路:
从第a层一直dfs即可,不过需要注意的是判断如果大于当前已知答案的步数后要return,不然T两个点。
三.代码实现:
1 #include "bits/stdc++.h" 2 using namespace std; 3 int n,a,b; 4 int step = INT_MAX; 5 int t[201]; 6 int bk[210]; 7 void dfs(int f,int s) 8 { 9 if(f == b) {step = min(step,s);return;} 10 if(s > step) return;//少了这句一直t两个 11 bk[f] = 1; 12 if(f - t[f] > 0 && !bk[f - t[f]]){dfs(f - t[f],s + 1);} 13 if(f + t[f] < n + 1 && !bk[f + t[f]]){dfs(f + t[f],s + 1);} 14 bk[f] = 0; 15 } 16 int main() 17 { 18 scanf("%d%d%d",&n,&a,&b); 19 for(int i = 1;i <= n;i++) 20 scanf("%d",&t[i]); 21 bk[a] = 1; 22 dfs(a,0); 23 if(step == INT_MAX) 24 printf("-1"); 25 else 26 printf("%d",step); 27 return 0; 28 }