52分求调,错的全是TLE
查看原帖
52分求调,错的全是TLE
1264600
Lazy_make_name楼主2024/8/25 22:36

不知道为啥,错的测试点全部用时超过1秒,对的测试点全部用时不到五毫秒,是不是死循环

#include<iostream>
using namespace std;
int c[201],b,min1=1000,lou[201],a,n;
void dfs(int dc,int cs){
	if(b==dc){//判断是否到达 
		if(cs<min1){
			min1=cs;
		}
		return;
	}
	if(lou[dc]==1)//如果已经搜查过就不用再去了,以免造成超时 
		return;
	if(dc-c[dc]>0){//检查合法性,避免数组越界 
		lou[dc]=1;
		dfs(dc-c[dc],cs+1);
		lou[dc]=0;
	}
	if(dc+c[dc]<=n){//同理 
		lou[dc]=1;
		dfs(dc+c[dc],cs+1);
		lou[dc]=0;
	}
	return;
}
int main(){
	cin>>n>>a>>b;
	for(int i=1;i<=n;i++){
		cin>>c[i];
	}
	dfs(a,0);
	if(min1==1000)
		cout<<-1;
	else
		cout<<min1;
}

证据

2024/8/25 22:36
加载中...