亮灯

  题目大意:有一个5*6的灯组,按一盏灯会让其他上下左右4栈和他自己灯变为原来相反的状态,要怎么按才会把所有的灯都按灭?

  3279翻版题目,不多说,另外这一题还可以用其他方法,比如DFS,BFS,不过这些都挺慢的,月还有一个特别厉害的方法,高斯消元法,等我以后再来写

  

 #include <iostream>
#include <algorithm>
#include <functional> using namespace std; static int map[][], store[][], flip[][];
static int dirx[] = { -, , , };
static int diry[] = { , -, , }; int solve(void);
int get_light(const int, const int); int main(void)
{
int sum_of_martrix, ans, res;
scanf("%d", &sum_of_martrix); for (int k = ; k <= sum_of_martrix;k++)
{
ans = INT_MAX;
for (int i = ; i < ; i++)//Read Gragh
for (int j = ; j < ; j++)
scanf("%d", &map[i][j]); for (int i = ; i < << ; i++)
{
memset(flip, , sizeof(flip));
for (int j = ; j < ; j++)
flip[][ - j] = (i >> j) & ;
res = solve();
if (res < ans)
{
ans = res;
memcpy(store, flip, sizeof(flip));
}
}
printf("PUZZLE #%d\n", k);
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
printf("%d ", store[i][j]);
printf("\n");
}
}
return EXIT_SUCCESS;
} int solve(void)
{
int ans = ;
for (int i = ; i < ; i++)
for (int j = ; j < ; j++)
flip[i][j] = get_light(i - , j);//如果这一列的上一行是亮灯,那么必须按下这盏灯 for (int j = ; j < ; j++)
{
if (get_light(, j) == )//看最后一行的灯的情况是否全部灯都灭了
return INT_MAX;
} for (int i = ; i < ; i++)
for (int j = ; j < ; j++)
ans += flip[i][j];
return ans;
} int get_light(const int y, const int x)
{
int dx, dy, sum = map[y][x]; for (int i = ; i < ; i++)
{
dx = x + dirx[i]; dy = y + diry[i];
if ( <= dx && dx < && <= dy && dy < )
sum += flip[dy][dx];
}
return sum % ;
}

  

Enum:EXTENDED LIGHTS OUT(POJ 1222)的更多相关文章

  1. POJ 1222 EXTENDED LIGHTS OUT(翻转+二维开关问题)

    POJ 1222 EXTENDED LIGHTS OUT 今天真是完美的一天,这是我在poj上的100A,留个纪念,马上就要期中考试了,可能后面几周刷题就没这么快了,不管怎样,为下一个200A奋斗, ...

  2. POJ 1222 EXTENDED LIGHTS OUT(高斯消元解异或方程组)

    EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 10835   Accepted: 6 ...

  3. Poj 1222 EXTENDED LIGHTS OUT

    题目大意:给你一个5*6的格子,每个格子中有灯(亮着1,暗着0),每次你可以把一个暗的点亮(或者亮的熄灭)然后它上下左右的灯也会跟着变化.最后让你把所有的灯熄灭,问你应该改变哪些灯. 首先我们可以发现 ...

  4. POJ 1222 EXTENDED LIGHTS OUT(高斯消元)题解

    题意:5*6的格子,你翻一个地方,那么这个地方和上下左右的格子都会翻面,要求把所有为1的格子翻成0,输出一个5*6的矩阵,把要翻的赋值1,不翻的0,每个格子只翻1次 思路:poj 1222 高斯消元详 ...

  5. POJ 1222 EXTENDED LIGHTS OUT(反转)

    EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12616   Accepted: 8 ...

  6. 【POJ】1222 EXTENDED LIGHTS OUT

    [算法]高斯消元 [题解] 高斯消元经典题型:异或方程组 poj 1222 高斯消元详解 异或相当于相加后mod2 异或方程组就是把加减消元全部改为异或. 异或性质:00 11为假,01 10为真.与 ...

  7. POJ 1222 POJ 1830 POJ 1681 POJ 1753 POJ 3185 高斯消元求解一类开关问题

    http://poj.org/problem?id=1222 http://poj.org/problem?id=1830 http://poj.org/problem?id=1681 http:// ...

  8. *POJ 1222 高斯消元

    EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9612   Accepted: 62 ...

  9. POJ 1222

    EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6196   Accepted: 40 ...

随机推荐

  1. 详细解读PHP时区修改正确方法

    .修改PHP.ini这个文件 找到date.timezone这行,去掉前面的分号,改成: date.timezone = Asia/Shanghai .修改 .htaccess文件 修改.htacce ...

  2. webpack构建与loaders

    loaders 定义 先了解一下webpack,webpack是一个用于针对js文件的构建工具,在被构建的js文件中,我们可以使用require语句和webpack loader,如下: var cs ...

  3. 深入分析,理解jQuery.Deferred源码

    前言: 如果你对jQuery.Callback回调对象不了解,或者只掌握其方法,但是没有通过阅读源码理解,可以先阅读 前一章jQuery.Callbacks源码解读二,因为只有完全理解jQuery.C ...

  4. [译]ES6箭头函数和它的作用域

    原文来自我的前端博客: http://www.hacke2.cn/arrow-functions-and-their-scope/ 在ES6很多很棒的新特性中, 箭头函数 (或者大箭头函数)就是其中值 ...

  5. POJ 2031 Building a Space Station

    3维空间中的最小生成树....好久没碰关于图的东西了.....              Building a Space Station Time Limit: 1000MS   Memory Li ...

  6. 给一系列的div中的第一个添加class

     $(".lb:first").addClass("active")

  7. Linux/CentOS配置:使用yum update更新时不升级内核的方法

    RedHat/CentOS/Fedora使用 yum update 更新时,默认会升级内核.但有些服务器硬件(特别是组装的机器)在升级内核后,新的内核可能会认不出某些硬件,要重新安装驱动,很麻烦.所以 ...

  8. 用phpcms开发模块时中文乱码问题

    学着用phpcms开发一个文件管理模块,出现中文乱码,折腾了半天,总结如下 1.自己在mysql客户端建表,默认表格的编码为latin1_swedish_ci,虽然可以建好后用alter命令修改编码, ...

  9. 关于ListView中notifyDataSetChanged()刷新数据不更新原因

    使用Listview的时候: 当要动态显示更改后的数据(例如数据库改动), 很多人应该都用过notifyDataSetChanged();这个方法来刷新Listview,显示改后的数据. 这时候就要注 ...

  10. mysql:You can't specify target table 'bpm_tksign_data' for update in FROM clause

    UPDATE bpm_tksign_data WHERE actinstid ' AND nodeid = 'SignTask1' AND batch = ( SELECT max(a.batch) ...