POJ 2811 熄灯问题:一个矩阵中有很多灯,按下一个位置的按钮会影响周围的灯,给定方案使得所有等都熄灭

                                                                                                                                      点击此处返回总目录

 

【题目】

 

POJ 2811 熄灯问题:一个矩阵中有很多灯,按下一个位置的按钮会影响周围的灯,给定方案使得所有等都熄灭_第1张图片

POJ 2811 熄灯问题:一个矩阵中有很多灯,按下一个位置的按钮会影响周围的灯,给定方案使得所有等都熄灭_第2张图片

 

【分析】

其实题意很简单。

1. 一个矩阵,5行6列,每个位置有一个灯和开关。

2. 按下一个开会,会使得上下左右四个地方受影响(状态变化)。

3. 给定一种状态,问怎么按开关,能让所有灯都熄灭。

 

 

怎么做呢?一共有30个开关,每个开关2种状态。共有2^30种组合,不可能枚举完。

其实只需要枚举第一行的2^6个状态即可。为什么呢?因为一旦第一行的状态确定了,第二行怎么按开关就确定了;一旦第二行的状态确定了,第三行怎么按开关就确定了。。。

比如,当按完第一行之后,得到的第一行的状态为:1  1  0  1  0  1。这时候要按第二行的开关,使得第一行的全部熄灭(不使第一行全熄灭后面就没机会了)。只能是,当第一行亮的时候,把第二行相应位置按一下;当第一行灭的时候,第二行相应位置不动。所以第二行,开关只能这么按:1 1 0 1 0 1。

 

 

【代码】

POJ 2811 熄灯问题:一个矩阵中有很多灯,按下一个位置的按钮会影响周围的灯,给定方案使得所有等都熄灭_第3张图片

POJ 2811 熄灯问题:一个矩阵中有很多灯,按下一个位置的按钮会影响周围的灯,给定方案使得所有等都熄灭_第4张图片

POJ 2811 熄灯问题:一个矩阵中有很多灯,按下一个位置的按钮会影响周围的灯,给定方案使得所有等都熄灭_第5张图片

POJ 2811 熄灯问题:一个矩阵中有很多灯,按下一个位置的按钮会影响周围的灯,给定方案使得所有等都熄灭_第6张图片

 

 

【结果】

POJ 2811 熄灯问题:一个矩阵中有很多灯,按下一个位置的按钮会影响周围的灯,给定方案使得所有等都熄灭_第7张图片

 

 

 

 

【另一种写法:使用位来存储】

 

一行有6盏灯,每种灯有2种状态。 一行只需要6个比特就够了。这样我们用一个char类型就可以存一行。

 

 

代码:

 

POJ 2811 熄灯问题:一个矩阵中有很多灯,按下一个位置的按钮会影响周围的灯,给定方案使得所有等都熄灭_第8张图片

POJ 2811 熄灯问题:一个矩阵中有很多灯,按下一个位置的按钮会影响周围的灯,给定方案使得所有等都熄灭_第9张图片

POJ 2811 熄灯问题:一个矩阵中有很多灯,按下一个位置的按钮会影响周围的灯,给定方案使得所有等都熄灭_第10张图片

POJ 2811 熄灯问题:一个矩阵中有很多灯,按下一个位置的按钮会影响周围的灯,给定方案使得所有等都熄灭_第11张图片

POJ 2811 熄灯问题:一个矩阵中有很多灯,按下一个位置的按钮会影响周围的灯,给定方案使得所有等都熄灭_第12张图片

 

结果:

POJ 2811 熄灯问题:一个矩阵中有很多灯,按下一个位置的按钮会影响周围的灯,给定方案使得所有等都熄灭_第13张图片

 

 

 

 

 

你可能感兴趣的:(7,算法)