新手求助——用DFS怎么过第一个测试点
查看原帖
新手求助——用DFS怎么过第一个测试点
699271
gaojizhe05楼主2023/11/12 12:25

问题

P1135用了DFS,后面全部AC,但第一个点超时。新手求助怎么过第一个测试点,希望大佬指教 logo

错误代码

#include<bits/stdc++.h>
using namespace std;
int n,a,b;
int ans=1e9,cnt;
int k[205];
bool vis[205];
void Dfs(int x,int t){
    if(t>=ans) return;
    if(x==b){
        ans=min(ans,t);
        return;
    }
    if(x-k[x]>0&&vis[x-k[x]]==0){
        vis[x-k[x]]=1;
        Dfs(x-k[x],t+1);
        vis[x-k[x]]=0;
    }
    if(x+k[x]<=n&&vis[x+k[x]]==0){
        vis[x+k[x]]=1;
        Dfs(x+k[x],t+1);
        vis[x+k[x]]=0;
    }
}
int main(){
    cin>>n>>a>>b;
    for(int i=1;i<=n;i++) cin>>k[i];
    vis[a]=1;
    Dfs(a,0);
    if(ans==1e9) cout<<-1;
    else cout<<ans;
    return 0;
}
2023/11/12 12:25
加载中...