用分治法求解棋盘覆盖问题
更新时间:2023-09-13 20:12:01 阅读量: 教学研究 文档下载
棋盘覆盖问题
问题描述:
在一个2k×2k(k≥0)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格
为特殊方格。显然,特殊方格在棋盘中出现的位置有4k中情形,因而有4k中不同的棋盘,图(a)所示是k=2时16种棋盘中的一个。棋盘覆盖问题要求用图(b)所示的4中不同形状的L型骨牌覆盖给定棋盘上除特殊方格以外的所有方格,且热河亮哥L型骨牌不得重复覆盖。 图(b)
图 (a) 问题分析:
K>0时,可将2k×2k的棋盘划分为4个2k-1×2k-1的子棋盘。这样划分后,由于原棋盘只
有一个特殊方格,所以,这4个子棋盘中只有1个子棋盘中有特殊方格,其余3个子棋盘中没有特殊方格。为了将这3个没有特殊方格的子棋盘转化成为特殊棋盘,以便采用递归方法求解,可以用一个L型骨牌覆盖这3个较小的棋盘的会合处,从而将原问题转化为4个较小规模的棋盘覆盖问题。递归地使用这种划分策略,直至将棋盘分割为1×1的子棋盘。 问题求解:
下面介绍棋盘覆盖问题中数据结构的设计。
(1) 棋盘:可以用一个二维数组board[size][size]表示一个棋盘,其中size=2k。为了
在递归处理的过程中使用同一个棋盘,将数组board设为全局变量。
(2) 子棋盘:整个棋盘用二维数组board[size][size]表示,其中的子棋盘由棋盘左上
角的下标tr、tc和棋盘大小s表示。
(3) 特殊方格:用board[dr][dc]表示特殊方格,dr和dc是该特殊方格在二维数组
board中的下标。
(4) L型骨牌:一个2k×2k的棋盘中有一个特殊方格,所以,用到L型骨牌的个数
为(4k-1)/3,将所有L型骨牌从1开始连续编号,用一个全局变量tile表示。
C语言源码: /*author: 彭洪伟
*studentID:0950310006 *class:计科1班
*problem:分治法解决棋盘覆盖问题 */
#include
int tile=1; //记录骨牌的型号
int board[20][20]={0}; //存储棋盘被覆盖的情况
void ChessBoard(int tr,int tc,int dr,int dc,int size)
{ //tr和tc是棋盘左上角的下标,dr和dc是特殊方格的下标,size是棋盘的大小 int t=0; int s; if (size==1)return; t=tile++; s=size/2; //划分棋盘 //覆盖左上角棋盘 if (dr=tc+s) //特殊方格在棋盘的右上角 ChessBoard(tr,tc+s,dr,dc,s); else { board[tr+s-1][tc+s]=t; ChessBoard(tr,tc+s,tr+s-1,tc+s,s); } //覆盖左下角棋盘 if (dr>=tr+s&&dc board[tr+s][tc+s-1]=t; ChessBoard(tr+s,tc,tr+s,tc+s-1,s); } //覆盖右下角棋盘 if (dr>=tr+s&&dc>=tc+s) //特殊方格在棋盘的右下角 ChessBoard(tr+s,tc+s,dr,dc,s); else { board[tr+s][tc+s]=t; ChessBoard(tr+s,tc+s,tr+s,tc+s,s); } } int main() { int k,x,y; printf(\请输入棋盘的规模K:\ scanf(\ printf(\请输入特殊方格的下标x,y:\ scanf(\ ChessBoard(0,0,x,y,pow(2,k)); for(int i=0; i 运行结果截图:
正在阅读:
用分治法求解棋盘覆盖问题09-13
2016最新临时工劳动合同书范本03-04
李彬《传播学引论》04-16
农民工工资支付管理办法06-30
人教版初中数学学案精选《分式》04-17
广州版小学英语四年级上册总复习(包括词汇短语语法)05-05
建筑材料知识竞赛题库 411-26
四川省水利水电工程设计概(估)算编制规定(2007)08-24
非妈助孕法1:放松心情最重要06-07
基础护理试题11-19
- 公务员上岸同学告诉你,怎样走出面试中常见的十大误区
- 作表率,我们怎么办(办公室主任)
- 乘务员安全责任书
- 增员面试流程
- 河南省焦作市规模以上租赁和商务服务业企业应付职工薪酬数据洞察报告2019版
- 最新4社区工作者面试题
- 个人简历表
- 男教工体检必检项目
- 河南省兰考县规模以上租赁和商务服务业企业应付职工薪酬数据洞察报告2019版
- 兼职译员测试稿
- 河南省开封市规模以上租赁和商务服务业企业应付职工薪酬数据洞察报告2019版
- 永州职业技术学院校园总体规划-永州职业学院
- 最新5、培训科长笔试题(答案)
- 2019雅商酒店境外人员登记培训稀有资料,不可错过
- 小学教师求职简历范文
- 红酒知识与礼仪
- 春节给领导拜年的短信拜年词
- 2019年上半年中小学教师资格证结构化面试真题1
- 20XX年县干部培训工作目标
- 硬笔试听课
- 治法
- 求解
- 棋盘
- 覆盖
- 问题
- 高含盐有机化工废水生物处理初探
- 干一行爱一行辩论赛
- 养兰用土
- 塑料挤出网项目可行性研究报告(发改立项备案+2013年最新案例范文)详细编制方案
- 采购资金支付计划业务流程和说明
- 伦潭公司2015年上半年工作总结暨下半年工作计划
- 公路工程预算定额规范
- 《春之声》单元分析教学设计
- 汽机应知应会
- Linux操作系统实验三2
- 纪检干部培训班学习心得体会
- 黄奇帆在江苏南通的讲话实录(精彩3万字)
- 西南大学人力资源与管理大作业 - 图文
- 如何打造区域性中心城市考试题93分
- 基于Matlab的电力系统故障分析与仿真 - 图文
- 三坊七巷形象策划
- 全县基础教育暨2016年中考备考工作会议讲话稿
- 2019精品高中数学 第二章 统计 2.3 变量间的相关关系优化练习 新人教A版必修3
- 电焊台使用说明书
- 音箱塑料面板市场前景预测及投资规划分析报告(目录)