十字翻转棋的解法(高斯消元法)

本文介绍了使用布尔方程和高斯消元法解决翻转棋达到全红状态的最小点击次数问题。通过将每个方格是否需要点击转化为布尔变量,列出方程并应用高斯消元法求解,降低了时间复杂度。
摘要由CSDN通过智能技术生成

翻转棋带给我的启发

——布尔方程&高斯消元法

今天上午上软件工程需求建模课,觉得乏味,开始玩起游戏。无意间看到徐浦手机上的翻转棋游戏,于是便一发不可收拾的去思考最佳解法。

翻转棋游戏,是一类智益游戏:5×4的方格,每个格子黑色或者红色,如下图

点击某一个方格,那么此格子的上下左右格子以及它本身 颜色都取反。于是,问怎么点击才可以使得所有的格子都变成红色

在纸上模拟了好几次,发现存在最小的点击次数。因为某个格子点一次和点3次效果一样,于是开始思考这个问题的解法。最典型的当然是暴力,20个格子,时间复杂度O(2^n)。显然格子再多一点就不靠谱。既然格子只有两个状态,那么,所有的运算都是布尔运算。而且考虑到,在一个格子上点击两次其实没变化,于是可以做出推断,最多只需要点击20次就可以得出所需要的状态。那么如何做呢?

我的方法是:用x(i)表示第i个方格是否需要点击。X(i)只取0或1,取1代表这个格子需要点击,取0则不需要点击。问题转换为如何求解x向量。现在我们需要加约束,因为所有格子都需要变成红色。不妨假设,红色的状态为0,黑色的状态为1。那么就是点击某些格子,让所有的x(i)变成0。

接下来列方程:

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值