POJ 1222 高斯消元法

原创 2012年03月30日 15:13:25

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

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

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

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

/*
ID:cxlove
PROB:POJ 1222
HINT:高斯消元
*/
#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");
		    else
			printf(" ");
                }
	}
	return 0;
}



poj 1222 高斯消元详解

题意 有一个5 * 6的矩阵,每个位置表示灯,1表示灯亮,0表示灯灭。 然后如果选定位置i,j点击,则位置i,j和其上下左右的灯的状态都会反转。 现在要你求出一个5 * 6的矩阵,1表示这个灯被...
  • u013508213
  • u013508213
  • 2015年08月03日 22:34
  • 2195

POJ1222熄灯问题

问题描述: 程序代码: /* *思路1:枚举所有可能的开关状态,对每个状态计算下最后灯的情况,看是否都熄灭 * 每种按钮有两种状态,一共有30个开关,那么状态数是2的30次方,太多不可...
  • november_chopin
  • november_chopin
  • 2017年02月16日 12:38
  • 897

POJ 1222 熄灯游戏

熄灯游戏, 枚举
  • morgan_xww
  • morgan_xww
  • 2010年08月10日 13:58
  • 4023

高斯消元几道入门题总结POJ1222&&POJ1681&&POJ1830&&POJ2065&&POJ3185

最近在搞高斯消元,反正这些题要么是我击败了它们,要么就是这些题把我给击败了。现在高斯消元专题部分还有很多题,先把几道很简单的入门题总结一下吧。 专题:http://acm.hust.edu.cn/vj...
  • u010885899
  • u010885899
  • 2015年11月11日 15:30
  • 596

【POJ 1222】EXTENDED LIGHTS OUT

高斯消元解异或方程组方法介绍~
  • Regina8023
  • Regina8023
  • 2015年04月09日 00:04
  • 947

POJ-1222 EXTENDED LIGHTS OUT(高斯消元)

题意: 给你一个5*6的矩阵,每个点上都有一个灯,按下f[i][j]的按钮,f[i][j]位置的灯的状态会改变,它上下左右的灯的状态也会改变(开变关,关变开)。 现在给出这个矩阵的初始状态,输出按下哪...
  • moringrain
  • moringrain
  • 2015年08月10日 14:19
  • 664

POJ 1222 (枚举+熄灯问题)

http://poj.org/problem?id=1222 题意:5x6个灯输出怎么熄灯才能都是灭的。0是灭,1是亮。 思路:首先要确定第一行的灯,随后剩下的灯随之确定,因为如果pu...
  • Since_natural_ran
  • Since_natural_ran
  • 2016年08月25日 10:44
  • 322

POJ EXTENDED LIGHTS OUT 1222【高斯消元+位运算】

Language: Default EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submiss...
  • ydd97
  • ydd97
  • 2015年08月10日 12:53
  • 872

关灯游戏 Lights out (三)(线性代数+高斯消元,搜索全部解)

关灯游戏和线性代数联系紧密,对于一个 的灯阵,用线性方程组+高斯消元法求解,时间复杂度为O(m×n)^3。相对于首行枚举算法复杂度O(2^n) ,线代算法的时间复杂度低很多。用线性代数求解关灯游戏是个...
  • MHL_1208980380
  • MHL_1208980380
  • 2017年02月06日 05:50
  • 1653

高斯消元法理解关灯问题

高斯消元法处理关灯问题
  • czkct
  • czkct
  • 2016年03月09日 14:40
  • 403
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ 1222 高斯消元法
举报原因:
原因补充:

(最多只允许输入30个字)