首页 > 代码库 > POJ 1222 EXTENDED LIGHTS OUT(高斯消元)
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\n",Cas++); for(int i=1;i<=30;i++){ printf("%d",p[i][31]); if(i%6==0)puts(""); else printf(" "); } }return 0;}
POJ 1222 EXTENDED LIGHTS OUT(高斯消元)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。