java熄灯问题,枚举算法案例--熄灯问题

熄灯问题

1.问题描述

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

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

当按下一个按钮后,该按钮以及周围位置(上下左右)的灯都会改变一次。即(原来亮的变暗,原来暗的变亮)

对矩阵中的每一盏灯设置一个初始状态。

请你写一个程序,确定需要按下那些按钮,插好使得所有的灯都被熄灭。

例图1:

f69c2060a102c6571571d1c023e8f21f.png

例图2:

4127603d9042c39158523bb735d96de4.png

叉号代表按下的按钮

输入:

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

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

这些数字以空格隔开,可以是0或1,0表示初始状态时熄灭的,1表示初始状态是点亮的。

输出:

对于每个案例都先输出一行“case#m”,m是案例序号

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

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

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

2.算法实现(c语言实现):

a19b26ccd786d6f71160fb87bf683202.png

3.算法思路:

以第一行作为一个局部;

当第一行的按钮全部作用完以后,第一行可能还会存在部分按钮是亮的

那么要想熄灭第一行第i列的灯,必须按下第二行第i列的灯,类似的,要想熄灭第n行第i列的灯,就需要按下第n+1行,第i列的灯,直到第5行。

其含义是,要想让第一行的灯全部熄灭,那么后面的所有行的灯按下的情况就已经确定。如果作用完最后一行,发现,最后一行的灯也全部熄灭,那么按下的过程就是一个解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值