高斯消元
/* * Author: xioumu * Created Time: 2011-11-4 16:24:07 * File Name: p1222.cpp */#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;int map[40][40];int ans[40];int n;void init(){ int i,j,k,r,w; memset(map,0,sizeof(map)); memset(ans,0,sizeof(ans)); for(i=0;i<30;i++) scanf("%d",&map[i][30]); for(i=0;i<30;i++) for(j=0;j<30;j++) { int x,y,xx,yy; x = i/6; y = i % 6; xx= j/6; yy= j % 6; if(abs(x-xx) + abs(y-yy)<= 1 ) map[j][i] = 1; } //for(i=0;i<30;i++,printf("\n")) //for(j=0;j<=30;j++) //printf("%d",map[i][j]);}int gauss(int map[40][40],int ans[40]){ int i,j,k,r,w; for(k=0;k<30;k++) { i = k; while(i<30 && map[i][k] == 0) i++; if(i == 30) continue; if(i > k) { for(j=0;j<=30;j++) swap(map[i][j],map[k][j]); } for(i=0;i<30;i++) if(map[i][k] && i != k) { for(j=k;j<=30;j++) map[i][j] ^= map[k][j]; } } //for(i=0;i<30;i++,printf("\n")) //for(j=0;j<=30;j++) //printf("%d",map[i][j]); for(k=29;k>=0;k--) { ans[k] = map[k][30]; for(i=0;i<=30 && !map[k][i];i++) ; if(i == 30) return 0; for(i=k+1;i<30;i++) ans[k] ^= map[k][i] * ans[i]; //ans[k] ^= map[k][k]; } return 1;}void solve(){ int i,j,k,r,w; if( !gauss(map,ans) ) printf("error\n"); for(i=0;i<30;i++) { printf("%d ",ans[i]); if( (i+1) % 6 == 0) printf("\n"); }}int main(){ int t,i; //freopen("p1222.in","r",stdin); scanf("%d",&t); for(i=1;i<=t;i++) { init(); printf("PUZZLE #%d\n",i); solve(); } return 0;}