POJ-1222熄灯问题(枚举+位运算)

该博客探讨了POJ-1222熄灯问题的解题策略,通过分析发现第1行是一个关键的“局部”,通过枚举第1行的状态并利用位运算来决定后续行的开关状态,以达到所有灯熄灭的目标。博主提出,只要确定第1行的状态,剩余行的状态就会随之唯一确定。最后,博客提供了使用位运算解决问题的代码实现。
摘要由CSDN通过智能技术生成

题意

– 有一个由按钮组成的矩阵, 其中每行有6个按钮, 共5行 每个按钮的位置上有一盏灯 ,当按下一个按钮后, 该按钮以及周围位置(上边, 下边, 左 边, 右边)的灯都会改变状态。如果灯原来是点亮的, 就会被熄灭 ,如果灯原来是熄灭的, 则会被点亮

• 在矩阵角上的按钮改变3盏灯的状态 • 在矩阵边上的按钮改变4盏灯的状态 • 其他的按钮改变5盏灯的状态

与一盏灯毗邻的多个按钮被按下时,一个操作会抵消另一次操 作的结果,给定矩阵中每盏灯的初始状态,求一种按按钮方案,使得所有 的灯都熄灭。

http://poj.org/problem?id=1222 题目链接

解题分析

• 第2次按下同一个按钮时, 将抵消第1次按下时所产生的结果 每个按钮最多只需要按下一次

• 各个按钮被按下的顺序对最终的结果没有影响 • 对第1行中每盏点亮的灯, 按下第2行对应的按钮, 就可以 熄灭第1行的全部灯 • 如此重复下去, 可以熄灭第1, 2, 3, 4行的全部灯。

基本思路

如果存在某个局部, 一旦这个局部的状态被确定, 那么剩余其他部分的状态只能是确定的一种, 或者不多的n 种, 那么就只需枚举这个局部的状态即可。

• 经过观察,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值