C++分治法解决棋盘覆盖问题
对于给定大小为NxN的棋盘,利用L形积木进行填充。具体而言,程序通过分治法对棋盘进行不断划分,直到达到最小单位,然后进行填充。实验环境为vs2019,实验题目是棋盘覆盖。在问题分析、数学建模和算法设计的过程中,首先将棋盘围绕中心划分为四等分,每次根据特殊块的位置放置一个积木,直到棋盘长度足够小(n=2)时,停止划分并开始填充。不使用全局变量,而是将信息作为参数传递,包括当前棋盘起点坐标(ax,ay),特殊点坐标(bx,by),棋盘长度n,二维棋盘board,以及当前使用的符号数cnt。设计函数trio,以n=2作为递归出口,若n不等于2,则根据特殊点位置放置一个积木,然后将棋盘四等分,继续递归。复杂度分析显示时间复杂度为O(nn),空间复杂度为O(nn)。
用户评论