完成时间:大二上
问题描述
棋盘覆盖问题:给定一个2k×2k的棋盘(具体图例见教材),有一个特殊棋格,拥有一个特殊棋格的棋盘称为特殊棋盘。现要用四种L型骨牌(具体图例见教材)覆盖特殊棋盘上除特殊棋格外的全部棋格,不能重叠,找出覆盖方案。
可行性分析
当n = 1时(22棋盘),显然有解
假设当n = k时(2^k2^k棋盘),有解,那么当n = k+1时(2^k+12^k+1棋盘),
将其划分为4个2^k2^k子棋盘,特殊方格位于其中一个棋盘中,用一个L形的骨牌
覆盖在另外三个子棋盘的公共部分,则子棋盘也化为了特殊棋盘,以此递归,得出有解。
源码
1 | def chess(tr,tc,pr,pc,size):#tr:棋盘初始行号 tc:棋盘初始列号 |
其中-1表示特殊棋格,行号列号均从0开始,相同数字表示一块L形的骨牌,数字大小说明其叠放次序。
运行结果
说明
本实验完成于大二上学期(2021下半年),所使用语言为Python