高斯消元
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#include<cmath>
#define LL long long

using namespace std;

const int N=35;

int lx[4]={1,-1,0,0};
int ly[4]={0,0,1,-1};
int a[N][N];
int ans[N];
int n;
void Gauss()
{
    int row=0;
    int col=0;
    while(row<n&&col<n)
    {
        int k=-1;
        for(int i=row;i<n;++i)
        {
            if(a[i][col]!=0)
            {
                k=i;break;
            }
        }
        if(k!=row)
        {
            for(int j=col;j<=n;++j)
            {
                swap(a[row][j],a[k][j]);
            }
        }
        int x=a[row][col];
        for(int i=row+1;i<n;++i)
        {
            int y=a[i][col];
            for(int j=col;j<=n;++j)
            {
                a[i][j]=(a[i][j]*x-y*a[row][j])%2;
            }
        }
        ++row;++col;
    }
    //cout<<row<<" "<<col<<endl;
    for(int i=row-1;i>=0;--i)
    {
        int sum=0;
        for(int j=i+1;j<n;++j)
        sum=sum+(ans[j]*a[i][j]);
        ans[i]=(a[i][n]-sum)/a[i][i]%2;
    }
    for(int i=0;i<5;++i)
    {
        for(int j=0;j<6;++j)
        {
            printf("%d",(ans[i*6+j]+2)%2);
            if(j<5)
            printf(" ");
        }
        printf("\n");
    }
}
int main()
{
    n=30;
    int T;
    scanf("%d",&T);
    for(int w=1;w<=T;++w)
    {
        memset(a,0,sizeof(a));
        for(int i=0;i<5;++i)
        {
            for(int j=0;j<6;++j)
            {
                int x;
                scanf("%d",&x);
                if(x==1)
                a[i*6+j][n]=1;
                a[i*6+j][i*6+j]=1;
                for(int l=0;l<4;++l)
                {
                    int l1=i+lx[l];
                    int l2=j+ly[l];
                    if(l1>=0&&l1<5&&l2>=0&&l2<6)
                    {
                        a[l1*6+l2][i*6+j]=1;
                    }
                }
            }
        }
        printf("PUZZLE #%d\n",w);
        Gauss();
    }
    return 0;
}

  

posted on 2012-07-26 10:01  夜->  阅读(158)  评论(0编辑  收藏  举报