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 }