关闭

poj 1222 经典枚举

121人阅读 评论(0) 收藏 举报
分类:

点击打开链接

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int M=8;
int g[M][M],button[M][M];
bool solve()
{
	int i,j,k;
	for(i=1;i<5;i++) //根据第i行的state 确定第i+1行的state 
	{
		for(j=1;j<=6;j++)
		{
			button[i+1][j]=(g[i][j]+button[i][j]+button[i][j-1]+button[i][j+1]+button[i-1][j])%2;
		}
	}
	for(j=1;j<=6;j++)
	{
		//原来如果1   总的按钮产生的效果也要为1  原来0 总的按钮0 
		if(g[5][j]!=(button[5][j]+button[5][j-1]+button[5][j+1]+button[4][j])%2)	//判断最后一行灯是否全灭 
		{
			return false;
		}
	} 
	return true;
}
void enumerate()
{
	int i,j,k;
	k=0;
	for(k=1;k<=6;k++)
	{
		button[1][k]=0;
	}
	while(!solve())
	{
		k=1;
		button[1][k]++;
		while(button[1][k]>1)
		{
			button[1][k]=0;
			k++;
			button[1][k]++;	
		}	
	}

	
}
int main()
{
	int cas,c;
	cin>>cas;
	c=0;
	while(cas--)
	{
		
		for(int i=0;i<=6;i++)
		{
			for(int j=0;j<=7;j++)
			{
				if(i==0||j==0||j==7||i==6)
				{
					g[i][j]=0;
				}
				else
				cin>>g[i][j];
			}
		}
		enumerate();//枚举第一行按钮的state(第一行按完后 第一行中可能有些灯没灭) 为了使全部的灯熄灭 第2行的状态就固定了 (第二行要是第一行的灯全熄灭) 
					//	 依次类推 最后一行使倒数第二行全灭 只要最后一行也熄灭了 则全部的灯都熄灭了 
		printf("PUZZLE #%d\n",++c);
		
		for(int i=1;i<=5;i++)
		{
			for(int j=1;j<=6;j++)
			{
				cout<<button[i][j]<<' ';
			}
			cout<<endl;
		}
	}
	return 0;
}


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

poj 1222 枚举(关灯游戏)

题意:一个5*6的灯方阵,0表示灯灭,1表示灯亮。按一盏灯其si
  • dumeichen
  • dumeichen
  • 2014-10-01 20:38
  • 404

POJ1222熄灯问题

问题描述: 程序代码: /* *思路1:枚举所有可能的开关状态,对每个状态计算下最后灯的情况,看是否都熄灭 * 每种按钮有两种状态,一共有30个开关,那么状态数是2的30次方,太多不可取 *思路2:如何减少枚举的数目呢? 如果存在某个局部,一旦这个局部状态被确定后,...
  • november_chopin
  • november_chopin
  • 2017-02-16 12:38
  • 907

poj 1222 高斯消元详解

题意 有一个5 * 6的矩阵,每个位置表示灯,1表示灯亮,0表示灯灭。 然后如果选定位置i,j点击,则位置i,j和其上下左右的灯的状态都会反转。 现在要你求出一个5 * 6的矩阵,1表示这个灯被点击过,0表示没有。 要求这个矩阵能够使得原矩阵的灯全灭。 非诚勿扰。 解析 来源 首先,...
  • u013508213
  • u013508213
  • 2015-08-03 22:34
  • 2230

poj_1753 递归+枚举

思路是别人的,自己理解了半天,渣渣
  • yeruby
  • yeruby
  • 2014-04-08 20:48
  • 1579

C语言中的熄灯问题extended lights out(枚举)POJ1222//乱用函数返回值会遭报应QAQ

Description http://poj.org/problem?id=1222 In an extended version of the game Lights Out, is a puzzle with 5 rows of 6 buttons each (the actual ...
  • lydia_ke
  • lydia_ke
  • 2017-11-15 20:44
  • 165

poj上搜索经典题目

声明: 1.这不是我原创的,是从网上找到的,跟大家分享一下。 2.后边标的难度是对于小菜而言的,像例如说applepi(杜神牛)这样的神牛除外。 3.放到这里还有一个原因是为了自己看着方便,因为我搜索较弱,要多加练习。 4.红的是我已经做过并AC的题,蓝的是我做过但还没AC,...
  • nailerTT
  • nailerTT
  • 2015-01-08 17:24
  • 845

(经典)POJ-3280 回文串DP

题目大意:给定一个字符串S及其长度M与S所含有的字符种数N(最多26种小写字母),然后给定这N种字母Add与Delete的代价,求将S变为回文串的最小代价和。 题目链接:点击打开链接 分析: 这题算得上是一个很经典的模型了,通过增添或者删除某些字母将一个字符串变为回文串,求
  • AC_hell
  • AC_hell
  • 2016-05-12 19:36
  • 555

poj 初级训练计划数据结构总结

两个下午一个晚上搞完了还是学到很多东西的。poj 1035,3080,1936简单C语言题。3080可以KMP,但数据水可以枚举,KMP的话就是把第一个串的所有子串与下面几个串匹配难度也不大。 poj 2388 就是sort. poj 2299 求逆序数==归并排序 当两个区间都排好时合并时你就...
  • acblacktea
  • acblacktea
  • 2016-04-30 00:04
  • 559

poj3977 Subset(折半枚举)

题目大意: 给定N个整数组成的数列(N 思路: 如果单纯的枚举的话,这N个数分别有选和不选两种,所以一共有2^35个子集。很明显,会超时,但是我们可以将这个整数数列分成两半,可得每边最多18个,如果分别进行枚举的话,复杂度可以降到O((N/2)²),即最多2^18,在可接受范围内。然...
  • lolicon480
  • lolicon480
  • 2015-03-09 11:39
  • 963

POJ 1050 To the Max (最大连续区间和+暴力枚举,水题)

Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1*1 or greater loc...
  • h1021456873
  • h1021456873
  • 2015-09-10 17:20
  • 330
    个人资料
    • 访问:113024次
    • 积分:7125
    • 等级:
    • 排名:第3718名
    • 原创:625篇
    • 转载:1篇
    • 译文:0篇
    • 评论:16条
    最新评论