POJ 1222 高斯消元法

来源:互联网 发布:淘宝开店照片要求 编辑:程序博客网 时间:2024/05/19 03:20

CXLOVE的第一篇博文,先来一个水题

开灯关灯问题,5*6的灯阵,将每一个位置上的状态看做一个变元,30个变元,列出30个异或方程,高斯消元解方程即可

N年前就做过这题,当时是位运算枚举+递推

从此cxlove的博客就正式开通了,欢迎大牛拍砖

/*ID:cxlovePROB:POJ 1222HINT:高斯消元*/#include<iostream>#include<cstdio>#include<cstring>using namespace std;using namespace std;int a[31][31];  //系数矩阵int ans[31];void gauss(){for(int i=0;i<30;i++){int k=i;for(;k<30;k++)if(a[k][i]!=0)break;for(int j=0;j<=30;j++)swap(a[i][j],a[k][j]);for(int j=0;j<30;j++)if(i!=j&&a[j][i])for(int k=0;k<=30;k++)a[j][k]=a[i][k]^a[j][k];}}int main(){int t,tt=0;scanf("%d",&t);while(t--){memset(a,0,sizeof(a));for(int i=0;i<30;i++){scanf("%d",&a[i][30]);ans[i]=0;}for(int i=0;i<30;i++){a[i][i]=1;if(i%6!=0)a[i-1][i]=1;if(i%6!=5)a[i+1][i]=1;if(i>5)a[i-6][i]=1;if(i<24)a[i+6][i]=1;}gauss();/*for(int i=0;i<30;i++){for(int j=0;j<=30;j++)printf("%d ",a[i][j]);printf("\n");}*/for(int j=0;j<30;j++)       ans[j]=a[j][30];        printf("PUZZLE #%d\n",++tt);        for(int i=0;i<30;i++){    printf("%d",ans[i]);    if(i%6==5)printf("\n");    elseprintf(" ");                }}return 0;}



原创粉丝点击