• poj 1222 & zoj 1354 EXTENDED LIGHTS OUT (枚举)


    http://poj.org/problem?id=1222

    和poj 1753类似,1753是求全0或全1的步数,这题是求全0的解决方案。

    当时是拿1753的代码改的,枚举步数,最多30步,这样的话状态总量就是2^30。。。

    枚举第一行状态,共2^6,第一行确定了便可确定其余行,最后看末行是否全为0即可。

    code:

    #include<cstdio>
    #include<cstring>
    int map[5][6], ans[5][6] ;
    int tur[5][2] = {00010, -110, -10} ;
    int flag ;
    void Tur(int x, int y){
        for(int i=0; i<5; i++){
            int tx = x + tur[i][0] ;
            int ty = y + tur[i][1] ;
            if(tx>=0&&ty>=0&&tx<5&&ty<6)
                map[tx][ty] ^= 1 ;
        }
    }
    void work(){        //根据第一行的状态确定其余ans
        for(int i=1; i<5; i++)
            for(int j=0; j<6; j++)
                if(map[i-1][j]){
                    Tur(i, j) ;
                    ans[i][j] = 1 ;
                }
    }
    void back(){
        for(int i=1; i<5; i++)
            for(int j=0; j<6; j++)
                if(ans[i][j]){
                    Tur(i, j) ;
                    ans[i][j] = 0 ;
                }
    }
    void test(){
        flag = 1 ;
        for(int i=0; i<6; i++)
            if(map[4][i]==1)    flag = 0 ;
    }
    void print(){
        int i, j ;
        for(i=0; i<5; i++){
            for(j=0; j<5; j++)
                printf("%d ", ans[i][j]) ;
            printf("%d\n", ans[i][j]) ;
        }
    }
    void dfs(int y){        //枚举第一行64种状态
        if(flag)    return ;
        if(y==6){
            work() ;
            test() ;
            if(flag)    print() ;
            else        back() ;
        }
        else{
            Tur(0, y) ;
            ans[0][y] = 1 ;
            dfs(y+1) ;
            Tur(0, y) ;
            ans[0][y] = 0 ;
            dfs(y+1) ;
        }
    }
    int main(){
        int t=0, i, j, n ;
        scanf("%d", &n) ;
        while(n--){
            memset(ans, 0sizeof(ans)) ;
            flag = 0 ;
            for(i=0; i<5; i++)
                for(j=0; j<6; j++)
                    scanf("%d", &map[i][j]) ;
            printf("PUZZLE #%d\n", ++t) ;
            dfs(0) ;
        }
        return 0 ;} 
  • 相关阅读:
    软件测试经理工作职责
    测试经理的年终总结
    从0到1,如何快速搭建人才梯队?
    Centos 的常用命令总结
    Docker的常用命令总结
    Jenkins Android项目编译配置(完整版)
    linux CentOS 权限问题修复(chmod 777 -R 或者chmod 755 -R问题修复)
    基于gitlab的项目管理流程
    js 防抖动、重复提交、频繁点击
    GPUImage移植总结
  • 原文地址:https://www.cnblogs.com/xiaolongchase/p/2445517.html
Copyright © 2020-2023  润新知