棋盘覆盖问题:在一个2^k×2^k(k≥0)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格。显然,特殊方格在棋盘中可能出现的位置有4^k种,因而有4^k种不同的棋盘。棋盘覆盖问题要求用4种不同形状的L型骨牌覆盖给定棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。如图:以4*4的棋盘为例:
四种不同形状的L型骨牌:

骨牌覆盖的结果:

棋盘填充的实现:
//分治回溯 分治的应用 之 棋盘覆盖问题
/*
利用分治算法 将棋盘分成三个子棋盘
首先要先判断特殊方格在哪个子棋盘中
若特殊方格在左上子棋盘中 就继续向下递归 将子棋盘再分为四个子棋盘即可
若左上子棋盘中没有特殊方格 我们就将左上子棋盘中的右下方的格子 当成一个特殊方格
再继续向下递归 将子棋盘再分为四个子棋盘 直到棋盘被全部覆为止
若右上子棋盘中没有特殊方格 我们就将右上子棋盘中的左下方的格子 当成一个特殊方格
再继续向下递归 将子棋盘再分为四个子棋盘 直到棋盘被全部覆为止
若左下子棋盘中没有特殊方格 我们就将下上子棋盘中的右上方的格子 当成一个特殊方格
再继续向下递归 将子棋盘再分为四个子棋盘 直到棋盘

本文探讨了如何利用分治回溯算法解决棋盘覆盖问题。在2^k×2^k的棋盘中,有一个特殊方格,目标是使用4种不同形状的L型骨牌覆盖所有非特殊方格,不允许骨牌重叠。文章通过4*4棋盘的例子展示了解决方案,并给出了棋盘填充的实现过程。
最低0.47元/天 解锁文章
851

被折叠的 条评论
为什么被折叠?



