dfs一百分求助
查看原帖
dfs一百分求助
797763
lishengkai楼主2023/8/17 19:30
#include<bits/stdc++.h>
using namespace std;
int n,a,b,go[201],ans;
bool vis[201];
inline void dfs(int c,int s)
{
	if(s==b)
	{
		ans=min(ans,c);
		return;
	}
	if(c>=ans)//剪枝.
		return;
	vis[s]=true;
	//不越界就搜.
	if(s+go[s]<=n&&!vis[s+go[s]])
		dfs(c+1,s+go[s]);
	if(s-go[s]>=1&&!vis[s-go[s]])
		dfs(c+1,s-go[s]);
	vis[s]=false;//回溯. 
}
int main()
{
	scanf("%d%d%d",&n,&a,&b);
	for(int i=1;i<=n;++i)
		scanf("%d",&go[i]);
	vis[a]=true;
	ans=0x7ffffff;
	dfs(0,a);
	if(ans==0x7ffffff)
		printf("-1");else
		printf("%d",ans);
	return 0;
}

第一个数据点TLE了,和help!!!

2023/8/17 19:30
加载中...