dfs 64 为什么?
查看原帖
dfs 64 为什么?
1041964
Hola_楼主2024/7/8 19:28

有的结果大1,有的结果正确?

感觉可能是非常低级的错误 (帮助可关,蟹蟹)

#include <bits/stdc++.h>
using namespace std;
bool flag=0;
int N,A,B,K[205],vis[205],ans=1e9;
void dfs(int now,int step){
	//cout<<ans<<endl;
	if(step>ans)return;
	if(K[now-1]==0&&now!=B)return;
	if(now==B){
		ans=min(ans,step);
		flag=1;
		return;
	}if(now+K[now-1]<=N&&!vis[now+K[now-1]-1]){
		vis[now+K[now-1]-1]=1;
		dfs(now+K[now-1],step+1);
	}if(now-K[now-1]>=1&&!vis[now-K[now-1]-1]){
		vis[now-K[now-1]-1]=1;
		dfs(now-K[now-1],step+1);
	}return;
}
int main(){
	cin>>N>>A>>B;
	for(int i=0;i<N;i++)cin>>K[i];
	dfs(A,0);
	if(!flag||N==0)cout<<-1;
	else cout<<ans;
	return 0;
}
2024/7/8 19:28
加载中...