dfs......第一个点T了?
查看原帖
dfs......第一个点T了?
750476
Hf_Poem楼主2023/4/25 22:23
//这题似乎是bfs更好做......
//但是我实在不想写bfs了
//所以我不做bfs了,dfs! 
#include<bits/stdc++.h>
#define int long long//为防止十年noi一场空,____________所以直接改名 
using namespace std;
int N, A, B, p[205],result=1145141919810;
bool f[205];//存楼层状态防止反复循环一层 
void dfs(int now,int step){
	if (now == B) {//结束条件 
		result = min(step, result);//当前和最小比较 
		return;
	}
	if (step>result) {
		return;//超了直接关,接着搜只会占时、空 
	}
	f[now]=true;//标记 
	if (now + p[now] <= N && !f[now + p[now]]) {
		dfs(now + p[now], step + 1);//向上摁电梯 
	}
	if (now - p[now] >= 1 && !f[now - p[now]]) {
		dfs(now - p[now], step + 1);//向下摁电梯 
	}
	f[now] = false;//还原 
}
signed main(){//dfs传统main函数总共10几行 
	ios::sync_with_stdio(false);
    cin.tie(0);
	cin>>N>>A>>B;
	for (int i=1;i<=N;i++)
		cin>>p[i];
	dfs(A,0);
	if (result==1145141919810)//如果没搜到result就反-1 
		cout<<"-1";
	else
		cout<<result;
	return 0;
}

100分unaccept?

T了???

时复似乎没问题啊

求佬

2023/4/25 22:23
加载中...