【高斯消元】Poj 1222:EXTENDED LIGHTS OUT
Description

The aim of the game is, starting from any initial set of lights on in the display, to press buttons to get the display to a state where all lights are off. When adjacent buttons are pressed, the action of one button can undo the effect of another. For instance, in the display below, pressing buttons marked X in the left display results in the right display.Note that the buttons in row 2 column 3 and row 2 column 5 both change the state of the button in row 2 column 4,so that, in the end, its state is unchanged.

Note:
1. It does not matter what order the buttons are pressed.
2. If a button is pressed a second time, it exactly cancels the effect of the first press, so no button ever need be pressed more than once.
3. As illustrated in the second diagram, all the lights in the first row may be turned off, by pressing the corresponding buttons in the second row. By repeating this process in each row, all the lights in the first
four rows may be turned out. Similarly, by pressing buttons in columns 2, 3 ?, all lights in the first 5 columns may be turned off.
Write a program to solve the puzzle.
Input
Output
翻译:给你一个5*6的初始状态,要求你给出一个5*6的操作矩阵,要求:当操作是1时,代表把棋盘的对应位置和它相邻的地方的状态改变(1变为0,0变为1),0则不进行操作。要求操作矩阵满足操作后棋盘状态全部为0.保证有解且唯一
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm> using namespace std; int f[][],ans[][],ga[][],cnt=; void print()
{
cnt++;
printf("PUZZLE #%d\n",cnt);
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
printf("%d ",ans[i][j]);
printf("\n");
}
} void Solve()
{
for(int i=;i>=;i--)
{
int x=i/+,y=i%;
if(!y) y+=,x--;
ans[x][y]=ga[i][];
for(int j=i+;j<=;j++)
if(ga[i][j]){
int x1=j/+,y1=j%;
if(!y1) y1+=,x1--;
ans[x][y]=ans[x][y]^ans[x1][y1];
}
}
} void swapp(int l,int r)
{
for(int i=;i<=;i++)
swap(ga[l][i],ga[r][i]);
} void find(int n)
{
for(int i=n+;i<=;i++)
if(ga[i][n]){swapp(i,n);return;}
} void Guass()
{
for(int i=;i<=;i++)//消第几个元
{
if(!ga[i-][i-])find(i-);
if(!ga[i-][i-])continue;
for(int j=i;j<=;j++)//第几个方程
{
if(!ga[j][i-])continue;
for(int k=i;k<=;k++)//方程的第几项
ga[j][k]=ga[j][k]^ga[i-][k];
}
}
Solve();
} void set()
{
for(int i=;i<=;i++)
for(int j=;j<=;j++){
ga[(i-)*+j][]=f[i][j];
ga[(i-)*+j][(i-)*+j]=; //自己和上下左右是对自己有影响的点
if(j!=) ga[(i-)*+j][(i-)*+j-]=;
if(j!=) ga[(i-)*+j][(i-)*+j+]=;
if(i!=) ga[(i-)*+j][i*+j]=;
if(i!=) ga[(i-)*+j][(i-)*+j]=;
}
return;
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
for(int i=;i<=;i++)
for(int j=;j<=;j++)
scanf("%d",&f[i][j]);
set();
Guass();
print();
memset(f,,sizeof(f));
memset(ga,,sizeof(ga));
memset(ans,,sizeof(ans));
}
return ;
}
【高斯消元】Poj 1222:EXTENDED LIGHTS OUT的更多相关文章
- POJ 1222 EXTENDED LIGHTS OUT(翻转+二维开关问题)
POJ 1222 EXTENDED LIGHTS OUT 今天真是完美的一天,这是我在poj上的100A,留个纪念,马上就要期中考试了,可能后面几周刷题就没这么快了,不管怎样,为下一个200A奋斗, ...
- POJ 1222 EXTENDED LIGHTS OUT(高斯消元解异或方程组)
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 10835 Accepted: 6 ...
- POJ 1222 EXTENDED LIGHTS OUT(高斯消元)
[题目链接] http://poj.org/problem?id=1222 [题目大意] 给出一个6*5的矩阵,由0和1构成,要求将其全部变成0,每个格子和周围的四个格子联动,就是说,如果一个格子变了 ...
- POJ 1222 EXTENDED LIGHTS OUT(高斯消元)题解
题意:5*6的格子,你翻一个地方,那么这个地方和上下左右的格子都会翻面,要求把所有为1的格子翻成0,输出一个5*6的矩阵,把要翻的赋值1,不翻的0,每个格子只翻1次 思路:poj 1222 高斯消元详 ...
- POJ 1222 EXTENDED LIGHTS OUT(高斯消元解XOR方程组)
http://poj.org/problem?id=1222 题意:现在有5*6的开关,1表示亮,0表示灭,按下一个开关后,它上下左右的灯泡会改变亮灭状态,要怎么按使得灯泡全部处于灭状态,输出方案,1 ...
- POJ 1222 EXTENDED LIGHTS OUT (高斯消元)
题目链接 题意:5*6矩阵中有30个灯,操作一个灯,周围的上下左右四个灯会发生相应变化 即由灭变亮,由亮变灭,如何操作使灯全灭? 题解:这个问题是很经典的高斯消元问题.同一个按钮最多只能被按一次,因为 ...
- Poj 1222 EXTENDED LIGHTS OUT
题目大意:给你一个5*6的格子,每个格子中有灯(亮着1,暗着0),每次你可以把一个暗的点亮(或者亮的熄灭)然后它上下左右的灯也会跟着变化.最后让你把所有的灯熄灭,问你应该改变哪些灯. 首先我们可以发现 ...
- POJ 1222 EXTENDED LIGHTS OUT(反转)
EXTENDED LIGHTS OUT Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12616 Accepted: 8 ...
- [高斯消元] POJ 2345 Central heating
Central heating Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 614 Accepted: 286 Des ...
随机推荐
- Features for configuring JSON-to-Java mapping
Following on/off features are defined in DeserializationConfig.Feature (Jackson 1.x) or Deserializat ...
- CXF(2.7.10) - Writing a service with Spring
1. 定义服务接口. package com.huey.demo.ws; import javax.jws.WebParam; import javax.jws.WebService; @WebSer ...
- Redis 命令 - Pub/Sub
PSUBSCRIBE pattern [pattern ...] Listen for messages published to channels matching the given patter ...
- 蒋金楠How ASP.NET MVC Works?[持续更新中…]
一.ASP.NET + MVC IIS与ASP.NET管道 MVC.MVP以及Model2[上篇] MVC.MVP以及Model2[下篇] ASP.NET MVC是如何运行的[1]: 建立在“伪”M ...
- android 使用两个surfaceview 在摄像机画面上绘图
转载自http://blog.csdn.net/jesse__zhong/article/details/24934083 使用双surface,将第一个设置为透明背景,在摄像机上绘制图像,纠结搞了一 ...
- kettle学习-day1-介绍、下载、安装
QQ群:306059317\ 技术支持:荷露叮咚网络学苑http://www.heludd.com/kettle 下载最新版,获取视频教程 kettle安装: 1).下载需要安装的kettle版本,官 ...
- 【SQLServer】将Job运行结果发送电子邮件通知用户
SQLServer2005/2008数据库邮件功能: 1. 启用数据库邮件功能:打开SQL Server 2005 外围应用配置器,选择“功能的外围应用配置器”,选择“数据库邮件”,勾选“启用数据库邮 ...
- 浏览器userAgent大全
iPhone ●iOSMozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Versi ...
- js 后台弹窗
后台弹出操作成功,失败信息 /// <summary> /// 弹出信息,并跳转指定页面. /// </summary> public static void AlertAnd ...
- out ref区别
1.使用ref型参数时,传入的参数必须先被初始化.对out而言,必须在方法中对其完成初始化. 2.out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候. ...