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

    这是一道dfs搜索题。(noi的题库测试数据有些水)

    已知每一层的步数,有两个方向(上下),求解到达终点的最少操作数。拿到这个题就发现是一个Dfs,于是便套了模板写代码。Wa了三次才AC。核心是:1.最早搜到结果的就是最少的操作数2每次有两个方向来搜索a[x]步,再判断新楼层是否存在即可。

    1.注意审题,注意无解的判断

    2.细节运算绝对不可以疏忽,不要“重复利用”

    3.搜索找好递归结束的条件

    4.搜索题找好儿子的枚举方向

    5.注意dfs第一个搜到的并不是最少的权,bfs是这样的


    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<cmath>
    #define N 100001
    using namespace std;
    int a[N];
    int book[N];
    int minn=N;
    int n;
    int start,b;
    bool judge1(int x,int y){
        if(x+y>n) return false;
        else return true;
    }
    bool judge2(int x,int y){
        if(x-y<0) return false ;
        else return true;
    }
    bool judge3(int x){
        if(book[x]==0) return true;
        else return false;
    }
    bool flag=false;
    void dfs(int x,int step){
        if(x==b){
            minn=min(step,minn);
            flag=true;
        }
        else if(step<=minn){
                if(judge1(x,a[x])&&judge3(a[x]+x)) {//上
                    book[x]=1;
                    dfs(x+a[x],step+1);
                    book[x]=0;
                }
                if(judge2&&judge3(x-a[x])){//下
                    book[x]=1;
                    dfs(x-a[x],step+1);
                    book[x]=0;
                }
            }
        }
    int main(){
        cin>>n;
        cin>>start>>b;
        for(int i=1;i<=n;i++){
            cin>>a[i]; 
        }
        dfs(start,0);
        if(flag==false) cout<<-1;
        else cout<<minn;
        return 0;
    }
    待到oi十一月,我花开后百花杀。
  • 相关阅读:
    ecshop首页最新评论的调用
    在ECSHOP商品列表页显示每个商品的评论等级和评论数量
    ecshop 系统信息在哪个页面
    ECSHOP去版权_ECSHOP2.7.2去版权方法最新方法
    ECShop 自定义函数以及调用
    ecshop 首页如何调用积分商城里面的的商品
    回到顶部的js代码
    ./flow.php (购物流程)
    C#把字符串转时间格式
    如何将服务端的多个文件打包下载(转)
  • 原文地址:https://www.cnblogs.com/china-mjr/p/11232290.html
Copyright © 2011-2022 走看看