zoukankan      html  css  js  c++  java
  • 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 ;} 
  • 相关阅读:
    多IDC数据分布--MySQL多机房部署
    Mongodb~连接串的整理
    Jenkins~配合Docker及dotnetCore进行生产和测试环境的灵活部署
    jenkins~集群分发功能的具体实现
    DotNetCore跨平台~linux上还原自主nuget包需要注意的问题
    jenkins~集群分发功能和职责处理
    HDU 2074 叠筐
    破解Veeam过程
    hdu1015(Safecracker )
    Oracle—RMAN备份(一)
  • 原文地址:https://www.cnblogs.com/xiaolongchase/p/2445517.html
Copyright © 2011-2022 走看看