zoukankan      html  css  js  c++  java
  • AOJ 0033 深度优先搜索

    题意:按给定顺序从A口放标号位1-10的10个球,利用挡板可以使球落到B或C,问能否使B和C里的球标号从下往上递增。

    分析:对于第 i 个球,若a[i]大于B口上方的球,则可放入B口;若a[i]大于C口上方的球,则可放入C口。利用深度优先搜索,选取合适的操作,若能按要求放完10个球,则成功。若所有情况都不能,则失败。

    C++代码:

    /*
    input:
    2
    3 1 4 2 5 6 7 8 9 10
    10 9 8 7 6 5 4 3 2 1
    output:
    YES
    NO
    */
    
    #include <cstdio>
    
    int a[10];
    
    bool dfs(int k, int B, int C){
        if(k == 10) return true;
        if(a[k] > B){
            if(dfs(k + 1, a[k], C))
                return true;
        }
        if(a[k] > C){
            if(dfs(k + 1, B, a[k]))
                return true;
        }
        return false;
    }
    
    void solve(){
        if(dfs(0, 0, 0))
            printf("YES
    ");
        else
            printf("NO
    ");
    }
    
    int main(int argc, char const *argv[]){
    
        int t;
        scanf("%d", &t);
        while(t --){
            for(int i = 0; i < 10; i ++)
                scanf("%d", &a[i]);
            solve();
        }
    
        return 0;
    }
  • 相关阅读:
    python深浅copy探究
    构建squid代理服务器
    python列表和元组操作
    python字符串操作
    Apache虚拟主机
    Apache访问控制
    部署AWStats分析系统
    LAMP平台部署
    二分查找
    设计模式六大原则
  • 原文地址:https://www.cnblogs.com/7hat/p/3590540.html
Copyright © 2011-2022 走看看