zoukankan      html  css  js  c++  java
  • POJ 1222 高斯消元

    高斯消元和二进制枚举都可以做这道题。

    这里是高斯消元的代码

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    int a[35][35]; //
    int x[35];  // 记录答案
    void init(){
        memset(a,0,sizeof(a));
        memset(x,0,sizeof(x));
        for(int i=0;i<5;i++){
            for(int j=0;j<6;j++){
                int t = i*6+j;
                a[i*6+j][t] = 1; // itself
                if(i>0)a[(i-1)*6+j][t] = 1; // top
                if(i<4)a[(i+1)*6+j][t] = 1; // bottom
                if(j>0)a[i*6+j-1][t] = 1; // left
                if(j<5)a[i*6+j+1][t] = 1; // right
            }
        }
    }
    void read(){
        for(int i=0;i<5;i++){
            for(int j=0;j<6;j++)
                scanf("%d",&a[i*6+j][30]);
        }
    }
    void gauss(){
        int k,equ=30,var=30,maxr,col;
        for(k=0,col=0;k<equ && col < var;k++,col++){
            maxr = k;
            for(int i=k+1;i<equ;i++){
                if(a[i][col] > a[maxr][col])
                    maxr = i;
            }
            if(maxr != k)
                for(int i=col;i<var+1;i++)
                    swap(a[k][i],a[maxr][i]);
            for(int i=k+1;i<equ;i++)if(a[i][col]){
                for(int j=col;j<var+1;j++){
                    a[i][j] ^= a[k][j];
                }
            }
        }
        for(int i=var-1;i>=0;i--){ // 回代
            //x[i] = a[i][var];
            for(int j=i+1;j<var+1;j++)if(a[i][j]){
                //x[i] ^= x[j];
                a[i][var] ^= a[j][var];
            }
        }
    }
    void print(int i){
        printf("PUZZLE #%d
    ",i);
        for(int i=0;i<5;i++){
            for(int j=0;j<6;j++){
                //printf("%d%c",x[i*6+j]," 
    "[j==5]);
                printf("%d%c",a[i*6+j][30]," 
    "[j==5]);
            }
        }
    }
    int main(){
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            init();
            read();
            gauss();
            print(i);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    狗狗急性肠胃炎
    shell change password
    男职工为什么要交生育保险
    预扣预缴个税
    转《最优状态机》
    状态机编程-队列缓冲事件,事件可异步触发
    max713镍氢电池充电管理IC
    NUP2201MR
    LSP5513
    74HC14D(6反向施密特触发器)
  • 原文地址:https://www.cnblogs.com/kongbb/p/10696609.html
Copyright © 2011-2022 走看看