P1135 奇怪的电梯
一开始以为深搜肯定没问题,从a点出发,衍生出一个二叉树,遍历所有情况就好了,但是会重复,所以加了一个vis防止重复,但是只拿了64pts,因为有可能某个点并不是最短被到达的,但是已经被标记上了vis,所以如果要遍历这一个整个合法的最短二叉树,应该要用BFS。
DFS的话因为是一直在搜,所以加一个dis数组,更新每个点的最短次数。
#include <bits/stdc++.h>
//#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define fr first
#define se second
#define endl '\n'
using namespace std;
const int N=200+5;
int n,k[N],a,b,ans=INT_MAX,dis[N];
void dfs(int x,int step){
if(x<1 or x>n or step>=dis[x] or step>=ans)return;
if(x==b)return ans=step,void();
dis[x]=step;
dfs(x+k[x],step+1);
dfs(x-k[x],step+1);
}
void