zoukankan      html  css  js  c++  java
  • dfs做奇怪的电梯

    看看这可恶的题目

    40分代码:
    #include <bits/stdc++.h>
    #define for(i,l,r) for(int i=l;i<=r;i++)
    #define inf 0x7f
    using namespace std;
    int ans=inf,n,s,e,a[inf],f[inf],step;
    void dfs(int now,int step){
        if(now==e) 
        { ans=min(ans,step);
        }
        else if(step<=ans) {
        f[now]=1;
            if(now+a[now]<=e&&f[now+a[now]]==0){
                dfs(now+a[now],step++);
            }
            if(now-a[now]>0&&f[now-a[now]]==0){
                dfs(now-a[now],step++);
            }
        f[now]=0;
        }
        }
    int main(){
    ios::sync_with_stdio(0);
    cin>>n>>s>>e;
    for(i,1,n){
        cin>>a[i];
    }
    f[s]=1;
    dfs(s,0);
    if(ans!=inf)
    cout<<ans;
    else cout<<"-1";
    return 0;
    }
    60分代码:(其他四个的时t掉的)
    #include <bits/stdc++.h>
    #define for(i,l,r) for(int i=l;i<=r;i++)
    #define inf 0x7f7f
    using namespace std;
    int ans=inf,n,s,e,a[inf],f[inf],step;
    void dfs(int now,int step){
        if(now==e) 
        { ans=min(ans,step);
        return; 
        }
        else if(step<=ans) {
            if(now+a[now]<=e){
                step++;
                f[now+a[now]]=1;
                dfs(now+a[now],step);
                step--;
                f[now+a[now]]=0;
            }
            if(now-a[now]>0){
                f[now-a[now]]=1;
                step++;
                dfs(now-a[now],step);
                step--;
                f[now-a[now]]=0;
            }
        }
        }
    int main(){
    ios::sync_with_stdio(0);
    cin>>n>>s>>e;
    for(i,1,n){
        cin>>a[i];
    }
    f[s]=1;
    dfs(s,0);
    if(ans!=inf)
    cout<<ans;
    else cout<<"-1";
    return 0;
    }
    70分代码:
    #include <bits/stdc++.h>
    #define for(i,l,r) for(int i=l;i<=r;i++)
    #define inf 0x7f
    using namespace std;
    int ans=inf,n,s,e,a[inf],f[inf],step;
    void dfs(int now,int step){
        if(now==e) 
        { ans=min(ans,step);
        return; 
        }
        else if(step<=ans) {
            if(now+a[now]<=e&&f[now+a[now]]==0){
                step++;
                f[now+a[now]]=1;
                dfs(now+a[now],step);
                step--;
                f[now+a[now]]=0;
            }
            if(now-a[now]>0&&f[now-a[now]]==0){
                f[now-a[now]]=1;
                step++;
                dfs(now-a[now],step);
                step--;
                f[now-a[now]]=0;
            }
        }
        }
    int main(){
    ios::sync_with_stdio(0);
    cin>>n>>s>>e;
    for(i,1,n){
        cin>>a[i];
    }
    f[s]=1;
    dfs(s,0);
    if(ans!=inf)
    cout<<ans;
    else cout<<"-1";
    return 0;
    }
    80分:
    #include <bits/stdc++.h>
    #define for(i,l,r) for(int i=l;i<=r;i++)
    #define inf 0x7f7f7f
    using namespace std;
    int ans=inf,n,s,e,a[207],step;
    bool f[207];
    void dfs(int now,int step){
    if(now==e) 
        { ans=min(ans,step);
        }
    if(step<=ans) {
            if(now+a[now]<=e&&f[now+a[now]]==0){
                f[now]=1;
                dfs(now+a[now],++step);
                f[now]=0;
            }
            if(now-a[now]>0&&f[now-a[now]]==0){
                f[now]=1;
                dfs(now-a[now],++step);
                f[now]=0;
            }
        }
        
        }
    int main(){
    ios::sync_with_stdio(0);
    cin>>n>>s>>e;
    for(i,1,n){
        cin>>a[i];
    }
    f[s]=1;
    dfs(s,0);
    if(ans!=inf)
    cout<<ans;
    else cout<<"-1";
    return 0;
    }
    100分
    #include <bits/stdc++.h>
    #define for(i,l,r) for(int i=l;i<=r;i++)
    #define inf 0x7f7f7f
    using namespace std;
    int ans=inf,n,s,e,a[207],step;
    bool f[207];
    void dfs(int now,int step){
    if(now==e) 
        { ans=min(ans,step);
        return;
        }
    if(step<=ans) {
            if(now+a[now]<=e&&f[now+a[now]]==0){
                f[now]=1;
                dfs(now+a[now],++step);
                f[now]=0;
                step--;
            }
            if(now-a[now]>0&&f[now-a[now]]==0){
                f[now]=1;
                dfs(now-a[now],++step);
                f[now]=0;
                step--;
            }
        }
        
        }
    int main(){
    ios::sync_with_stdio(0);
    cin>>n>>s>>e;
    for(i,1,n){
        cin>>a[i];
    }
    f[s]=1;
    dfs(s,0);
    if(ans!=inf)
    cout<<ans;
    else cout<<"-1";
    return 0;
    }
    

      是不是惊人的相似,其实就是回溯的正确与否,不要太相信题解,,不要太相信题解,不要太相信题解,不要太相信题解@@@@@

    原绿色洒满天际
  • 相关阅读:
    redis 集群目标、集群查看、配置方法及过程、哨兵配置启动
    redis 事务、Jedis事务处理流程
    redis订阅与发布(把redis作为消息中间件)
    redis 管道技术 pipeline 简介
    redis 适用场景、缓存选择、java实现
    redis 数据淘汰策略与配置
    redis 持久化策略、aof配置、测试、手动持久化、aof文件体积优化
    redis 命令行查看修改配置文件项、配置文件说明
    redis HyperLogLog 基数估算
    redis 命令select、dbsize、清空数据库、info、client
  • 原文地址:https://www.cnblogs.com/sc-pyt-2021-theworld/p/10344437.html
Copyright © 2011-2022 走看看