网易首页 > 网易号 > 正文 申请入驻

程序设计实习:11.2熄灯问题

0
分享至

枚举 — 熄灯问题:

熄灯问题 2 问题描述

有一个由按钮组成的矩阵, 其中每行有6个按钮, 共5行

每个按钮的位置上有一盏灯

问题描述

有一个由按钮组成的矩阵, 其中每行有6个按钮, 共5行

每个按钮的位置上有一盏灯

当按下一个按钮后, 该按钮以及周围位置(上边, 下边, 左 边, 右边)的灯都会改变一次

问题描述

如果灯原来是点亮的, 就会被熄灭

如果灯原来是熄灭的, 则会被点亮

在矩阵角上的按钮改变3盏灯的状态

在矩阵边上的按钮改变4盏灯的状态

其他的按钮改变5盏灯的状态

在下图中, 左边矩阵中用X标记的按钮表示被按下, 右边的矩阵表示灯状态的改变

与一盏灯毗邻的多个按钮被按下时, 一个操作会抵消另 一次操作的结果 第2行第3, 5列的按钮都被按下 第2行第4列的灯的状态就不改变

对矩阵中的每盏灯设置一个初始状态 请你写一个程序, 确定需要按下哪些按钮, 恰好使得所 有的灯都熄灭 X X X 输入:

第一行是一个正整数N, 表示需要解决的案例数

每个案例由5行组成, 每一行包括6个数字

这些数字以空格隔开, 可以是0或1

0 表示灯的初始状态是熄灭的

1 表示灯的初始状态是点亮的 7 输出:

对每个案例, 首先输出一行, 输出字符串 “PUZZLE #m”, 其中m是该案例的序号

接着按照该案例的输入格式输出5行

1 表示需要把对应的按钮按下

0 表示不需要按对应的按钮

每个数字以一个空格隔开

解题分析(1) 第2次按下同一个按钮时, 将抵消第1次按下时所产 生的结果 每个按钮最多只需要按下一次 各个按钮被按下的顺序对最终的结果没有影响 对第1行中每盏点亮的灯, 按下第2行对应的按钮, 就 可以熄灭第1行的全部灯 如此重复下去, 可以熄灭第1, 2, 3, 4行的全部灯

解题分析(2) 第一想法: 枚举所有可能的按钮(开关)状态, 对每个状 态计算一下最后灯的情况, 看是否都熄灭 每个按钮有两种状态(按下或不按下) 一共有30个开关, 那么状态数是2 30 , 太多, 会超时 如何减少枚举的状态数目呢? 基本思路: 如果存在某个局部, 一旦这个局部的状态被确定, 那么剩余其他部分的状态只能是确定的一种, 或者不多的n 种, 那么就只需枚举这个局部的状态即可

解题分析(3) 本题是否存在这样的 “局部” 呢? 经过观察, 发现第1行就是这样的一个 “局部” 因为第1行的各开关状态确定的情况下, 这些开关作用过后, 将 导致第1行某些灯是亮的, 某些灯是灭的 要熄灭第1行某个亮着的灯(假设位于第i列), 那么唯一的办法就 是按下第2行第i列的开关 (因为第1行的开关已经用过了, 而第3行及其后的开关不会影响 到第1行) 为了使第1行的灯全部熄灭, 第2行的合理开关状态就是唯一的 1

解题分析(4) 第2行的开关起作用后, 为了熄灭第2行的灯, 第3行的合理开关状态就也是唯一的 以此类推, 最后一行的开关状态也是唯一的 只要第1行的状态定下来, 记作A, 那么剩余行的情况就是确 定唯一的了 推算出最后一行的开关状态, 然后看看最后一行的开关起作 用后, 最后一行的所有灯是否都熄灭: 如果是, 那么A就是一个解的状态 如果不是, 那么A不是解的状态, 第1行换个状态重新试试 只需枚举第1行的状态, 状态数是2 6 = 64 13 有没有状态数更少的做法? 枚举第一列, 状态数是2 5 = 32 执行次数: 64×5×6 vs. 32×6×5

具体实现

用一个矩阵 puzzle[5][6] 表示灯的初始状态

puzzle[i][j]=1: 灯(i, j)初始时是被点亮的

puzzle [i][j]=0: 灯(i, j)初始时是熄灭的

用一个矩阵 press[5][6] 表示要计算的结果

press[i][j]=1: 需要按下按钮(i, j)

press[i][j]=0: 不需要按下按钮(i, j)

15

press[0]里放着第1行开关的状态, 如何进行枚举呢?

可以使用六重循环:

for( int a0 = 0; a0 < 2; a0++ )

for( int a1 = 0; a1 < 2; a1++ )

for( int a2 = 0; a2 < 2; a2++ )

for( int a3 = 0; a3 < 2; a3++ )

for( int a4 = 0; a4 < 2; a4++ )

for( int a5 = 0; a5 < 2; a5++ ) {

press[0][0] = a0;

press[0][1] = a1;

press[0][2] = a2; ……

}

16

实现方案

根据上面的分析, 按钮矩阵的第1行元素的各种取值进

行枚举, 依次考虑如下情况:

枚举方式:

将按钮矩阵的第1行看作一个二进制数

通过实现++操作实现 17

000000

0 0 0 0 0 1

0 0 0 0 1 0

0 0 0 0 1 1

0 0 0 1 0 0

111111

实现方案

用一个68的数组来表示按钮矩阵:

简化计算数组下一行的值的计算公式

第0行, 第0列和第7列不属于PRESS矩阵范围, 可全置0

给定PRESS的第1行取值, 计算出PRESS的其他行的值

press[2][c]=(puzzle[1][c]+press[1][c-1]

+press[1][c]+press[1][c+1] + press[0][c]) %2

0<r<5, 0<c<7

总 结 枚举过程 enumerate( )

press[1][]中每一个元素表示一个二进制数0/1, 通过模拟 二进制加法方式实现枚举

需要处理进位 推测验证过程 guess( )

用68按钮矩阵来简化下一行按钮值的计算公式

根据press[1][]和Puzzle数组, 用公式来计算使得1-4行所 有灯熄灭的press其他行的值, 再判断所计算的press数 组能否熄灭矩阵第5行的所有灯

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
博主谈李金羽辞职:这太突然了,估计是中超有球队找他了

博主谈李金羽辞职:这太突然了,估计是中超有球队找他了

直播吧
2024-05-22 11:11:27
冠军后卫名不虚传,霍勒迪到底有多出色

冠军后卫名不虚传,霍勒迪到底有多出色

一才说个球
2024-05-23 00:31:17
21岁中飞院学生刘安赛去世,脸上伤痕明显,学校回应,家属怒斥

21岁中飞院学生刘安赛去世,脸上伤痕明显,学校回应,家属怒斥

180°视角
2024-05-22 13:19:44
真不是迷信,兄弟姐妹中,命最好的身上往往有这3个特征

真不是迷信,兄弟姐妹中,命最好的身上往往有这3个特征

华人星光
2024-05-22 15:21:17
单月销量上涨9693台,买问界M9的人图啥?

单月销量上涨9693台,买问界M9的人图啥?

优视汽车
2024-05-22 17:09:06
中国也要提高关税了!

中国也要提高关税了!

楚楚的留香
2024-05-22 17:15:02
蔡英文从没得到过的“待遇”,大陆给了赖清德,国民党高层秒懂了

蔡英文从没得到过的“待遇”,大陆给了赖清德,国民党高层秒懂了

千里持剑
2024-05-21 15:54:13
“真漂亮,睡吗?”韩国警察要求嫌疑人母亲与自己发生性关系

“真漂亮,睡吗?”韩国警察要求嫌疑人母亲与自己发生性关系

奋斗在韩国
2024-05-22 17:22:45
女人在过夫妻性生活时,为什么总发出声音?医生:大多数人不了解

女人在过夫妻性生活时,为什么总发出声音?医生:大多数人不了解

皮皮讲文
2024-01-02 10:36:17
三连冠!辽篮赛季总结:中途换帅,绝境掀翻广东,4-0横扫新疆

三连冠!辽篮赛季总结:中途换帅,绝境掀翻广东,4-0横扫新疆

天涯沦落人
2024-05-22 21:28:40
云南一男子强奸嫂子,嫂子绝望哀求:只要别杀我,想干什么都行

云南一男子强奸嫂子,嫂子绝望哀求:只要别杀我,想干什么都行

玲说百态味
2024-05-16 17:21:28
两天三起公共场合持刀杀人案,致多人死伤,戾气太重,值得深思

两天三起公共场合持刀杀人案,致多人死伤,戾气太重,值得深思

雨秋闲话
2024-05-22 13:20:41
男子和自家保姆相处6年,日久生情欲携手余生,大胆求爱引发争议

男子和自家保姆相处6年,日久生情欲携手余生,大胆求爱引发争议

小林子的故事
2024-05-22 19:59:03
《披荆斩棘的哥哥4》28号初舞台录制,已曝光邀请名单!

《披荆斩棘的哥哥4》28号初舞台录制,已曝光邀请名单!

商业故事坊
2024-05-22 09:33:23
暴力锁喉执法还反问“暴不暴”?涉事交警被停职!

暴力锁喉执法还反问“暴不暴”?涉事交警被停职!

新京报
2024-05-22 14:54:46
涉肉串喷漆烤肉店已成立12年 官方通报贵州一烤肉店给肉串喷漆

涉肉串喷漆烤肉店已成立12年 官方通报贵州一烤肉店给肉串喷漆

和讯网
2024-05-22 19:05:29
时隔5年重启!谌贻琴离京赴西安,出席这一重要活动

时隔5年重启!谌贻琴离京赴西安,出席这一重要活动

政知新媒体
2024-05-22 20:45:27
不复当年之勇!多米尼克-琼斯总决赛4场场均仅10.3分4.5板4.8助

不复当年之勇!多米尼克-琼斯总决赛4场场均仅10.3分4.5板4.8助

直播吧
2024-05-22 22:37:14
费翔母亲毕丽娜:传言是大陆特工,17岁去台湾,两任丈夫身份特殊

费翔母亲毕丽娜:传言是大陆特工,17岁去台湾,两任丈夫身份特殊

阿胡
2024-05-20 12:44:22
伊朗每年石油收益几千亿美元,为何老百姓还是穷困潦倒?

伊朗每年石油收益几千亿美元,为何老百姓还是穷困潦倒?

蓝色海边
2024-05-21 20:04:19
2024-05-23 01:00:49
爱你雅课
爱你雅课
科普知识,科教视频
213文章数 623关注度
往期回顾 全部

科技要闻

微软给用户更多理由回到 Windows

头条要闻

小学生跑200米中途倒地昏迷入院后离世 教育局回应

头条要闻

小学生跑200米中途倒地昏迷入院后离世 教育局回应

体育要闻

官方:橡树资本接管国米 8年苏宁时代结束

娱乐要闻

乔欣助理离职大爆料!涉及明星超10位

财经要闻

理想不再“理想”

汽车要闻

舒适价值拉满 奇瑞风云T9售12.99-16.99万元

态度原创

教育
房产
家居
公开课
军事航空

教育要闻

允许孩子偶尔有“小情绪”,才是真正的智慧父母

房产要闻

实地测评海口“豪装”安居房:这位置,这价格,把自己劝一下!

家居要闻

化实为虚 理性与柔美的交互

公开课

近视只是视力差?小心并发症

军事要闻

俄按计划进行核武演练 未明确后续是否将进行实弹试射

无障碍浏览 进入关怀版