zoukankan      html  css  js  c++  java
  • POJ 1222 EXTENDED LIGHTS OUT(高斯消元)

    【题目链接】 http://poj.org/problem?id=1222

     

    【题目大意】

      给出一个6*5的矩阵,由0和1构成,要求将其全部变成0,每个格子和周围的四个格子联动,就是说,如果一个格子变了数字,周围四格都会发生变化,变化即做一次与1的异或运算,输出每个格子的操作次数。

    【题解】

      高斯消元练手题,对于每个格子的最终情况列一个方程,一共三十个方程三十个未知数,用高斯消元求解即可。

    【代码】

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    int T,p[35][35],Cas=1;
    void Gauss(int n,int m){
        int i,j,k,h,w;
        for(i=j=1;j<m;j++,w=0){
            for(k=i;k<=n;k++)if(p[k][j])w=k;
            if(w){
                for(k=j;k<=m;k++)swap(p[i][k],p[w][k]);
                for(k=1;k<=n;k++)if(k!=i&&p[k][j]){
                    for(h=j;h<=m;h++)p[k][h]^=p[i][h];
                }i++;
            }if(i>n)break;
        }
    }
    int main(){
        scanf("%d",&T);
        while(T--){
            memset(p,0,sizeof(p));
            for(int i=1;i<=30;i++){
                p[i][i]=1;
                if(i>6)p[i-6][i]=1;
                if(i<25)p[i+6][i]=1;
                if(i%6!=1)p[i-1][i]=1;
                if(i%6!=0)p[i+1][i]=1;
            }for(int i=1;i<=30;i++){scanf("%d",&p[i][31]);}
            Gauss(30,31);
            printf("PUZZLE #%d
    ",Cas++);
            for(int i=1;i<=30;i++){
                printf("%d",p[i][31]);
                if(i%6==0)puts("");
                else printf(" "); 
            }
        }return 0;
    }
    

      

  • 相关阅读:
    网络故障排除工具 | 快速定位网络故障
    Brocade博科光纤交换机zone配置
    博科Brocade 300光纤交换机配置zone教程
    游戏开发
    第8章 图
    第7章 二叉树
    第6章 树型结构
    第5章 递归
    第4章 字符串、数组和特殊矩阵
    第3章 顺序表的链式存储
  • 原文地址:https://www.cnblogs.com/forever97/p/poj1222.html
Copyright © 2011-2022 走看看