算法设计 L型组件填图问题
算法设计 L型组件填图问题
1. 问题描述
设B是一个n×n棋盘,n=2k,(k=1,2,3,…)。用分治法设计一个算法,使得:用若干个L型条块可以覆盖住B的除一个特殊方格外的所有方格。其中,一个L型条块可以覆盖3个方格。且任意两个L型条块不能重叠覆盖棋盘。
例如:如果n=2,则存在4个方格,其中,除一个方格外,其余3个方格可被一L型条块覆盖;当n=4时,则存在16个方格,其中,除一个方格外,其余15个方格被5个L型条块覆盖。
2. 具体要求
输入一个正整数n,表示棋盘的大小是nn的。输出一个被L型条块覆盖的nn棋盘。该棋盘除一个方格外,其余各方格都被L型条块覆盖住。为区别出各个方格是被哪个L型条块所覆盖,每个L型条块用不同的数字或颜色、标记表示。
代码:
int num = 1; //表示L的数字/// <summary>
/// 给棋盘上色(填数字)
/// </summary>
/// <param name="x">选定格的x坐标</param>
/// <param name="y">选定格的y坐标</param>
/// <param name="a">棋盘</param>
/// <param name="size">棋盘大小</param>
/// <param name="leftTopX">棋盘左上角x坐标</param>
/// <param name="leftTopY">棋盘左上角y坐标</param>
void color(int x, int y, int** a, int size, int leftTopX, int leftTopY)
{int maxX = leftTopX + size - 1; //求棋盘最大x下标int maxY = leftTopY + size - 1; //求棋盘最大y下标int midX = (maxX + leftTopX) / 2; //求棋盘x坐标中值int midY = (maxY + leftTopY) / 2; //求棋盘y坐标中值if (size == 1){return;}//根据选定格在哪个子棋盘,将其余三个子棋盘在中间的三个L形格子填色//按左上、右上、左下、右下的顺序,一次递归给子棋盘上色if (x <= midX && y <= midY) //选定格在左上子棋盘{a[midX][midY + 1] = num;a[midX + 1][midY + 1] = num;a[midX + 1][midY] = num;num++;color(x, y, a, size / 2, leftTopX, leftTopY);color(midX, midY + 1, a, size / 2, leftTopX, midY + 1);color(midX + 1, midY, a, size / 2, midX + 1, leftTopY);color(midX + 1, midY + 1, a, size/2, midX + 1, midY + 1);}else if (x <= midX && y > midY) //选定格在右上子棋盘{a[midX][midY] = num;a[midX + 1][midY] = num;a[midX + 1][midY + 1] = num;num++;color(midX, midY, a, size / 2, leftTopX, leftTopY);color(x, y, a, size / 2, leftTopX, midY + 1);color(midX + 1, midY, a, size / 2, midX + 1, leftTopY);color(midX + 1, midY + 1, a, size / 2, midX + 1, midY + 1);}else if (x > midX && y <= midY) //选定格在左下子棋盘{a[midX][midY] = num;a[midX][midY + 1] = num;a[midX + 1][midY + 1] = num;num++;color(midX, midY, a, size / 2, leftTopX, leftTopY);color(midX, midY + 1, a, size / 2, leftTopX, midY + 1);color(x, y, a, size / 2, midX + 1, leftTopY);color(midX + 1, midY + 1, a, size / 2, midX + 1, midY + 1);}else if (x > midX && y > midY) //选定格在右下子棋盘{a[midX][midY + 1] = num;a[midX][midY] = num;a[midX + 1][midY] = num;num++;color(midX, midY, a, size / 2, leftTopX, leftTopY);color(midX, midY + 1, a, size / 2, leftTopX, midY + 1);color(midX + 1, midY, a, size / 2, midX + 1, leftTopY);color(x, y, a, size / 2, midX + 1, midY + 1);}else{cout << "出错" << endl;return;}
}void printOne(int** a, int size)
{for (int i = 0; i < size; i++){for (int j = 0; j < size; j++){cout << "\t" << a[i][j];}cout << endl << endl << endl << endl;}cout << endl;
}void one()
{int n, x, y;cin >> n >> x >> y;int** a = new int* [n];for (int i = 0; i < n; i++){a[i] = new int[n];}a[x][y] = 0;color(x, y, a, n, 0, 0);printOne(a, n);for (int i = 0; i < n; i++){delete[] a[i];}delete[] a;
}
截图:
算法设计 L型组件填图问题相关推荐
- 分治法——棋盘覆盖问题/L形组件填图问题(Java实现)
问题描述 设B是一个n×n棋盘,n=2k,(k=1,2,3,-).用分治法设计一个算法,使得:用若干个L型条块可以覆盖住B的除一个特殊方格外的所有方格.其中,一个L型条块可以覆盖3个方格.且任意两个L ...
- 算法设计与分析 实验三 回溯法求解地图填色问题
回溯法求解地图填色问题 一.实验目的与要求 1.实验基本要求: 2.实验亮点: 二.实验内容与方法 三.实验步骤与过程 1.未优化的回溯: (1)算法描述: (2)编程实现 (3)运行并测试: 2.对 ...
- 【图的着色问题】算法设计与分析实验1
计算机科学与工程学院实验报告 课程名称 算法设计与分析 班级 实验内容 实验1:图的着色问题 指导教师 姓名 重剑DS 学号 实验日期 2022.04.28 一.问题描述,含输入.输出数据内容.格式 ...
- CSP 201409-5 拼图问题(给出一个n×m的方格图,现在要用如下L型的积木拼到这个图中......)
CSP 201409-5 拼图问题 一.题目信息 第一次写博客,有什么疏漏之处,欢迎各位大佬指出<(* ̄▽ ̄*)/ 题目要求 试题编号 201409-5 试题名称 拼图 时间限制 3.0s 试题 ...
- 实验四 图的遍历算法设计与实现
一.实验名称:图的遍历算法设计与实现 二.实验目的: 1.掌握图的深度优先遍历的算法. 2.掌握图的广度优先遍历的算法. 3.实验章节:算法设计与分析 第四章 三.实验内容.实验问题和程序运行结果 第 ...
- 分治算法--L型骨牌棋盘覆盖
L型骨牌棋盘覆盖 题目描述 有一个棋盘,要求用给定的四种骨牌进行覆盖.四种骨牌定义如下: 给定的棋盘中有一个格子不存在,即不需要覆盖的格子. 输入 输入有多个用例,第一个为用例个数n,接下来每个用 ...
- python堆叠面积图_06. Matplotlib 2 |折线图| 柱状图| 堆叠图| 面积图| 填图| 饼图| 直方图| 散点图| 极坐标| 图箱型图...
1.基本图表绘制 plt.plot() 图表类别:线形图.柱状图.密度图,以横纵坐标两个维度为主 同时可延展出多种其他图表样式 plt.plot(kind='line', ax=None, figsi ...
- Matplotlib 2 |折线图| 柱状图| 堆叠图| 面积图| 填图| 饼图| 直方图| 散点图| 极坐标| 图箱型图
目录 Matplotlib 2 |折线图| 柱状图| 堆叠图| 面积图| 填图| 饼图| 直方图| 散点图| 极坐标| 图箱型图 1.基本图表绘制 plt.plot() ts.plot() 由Seri ...
- 计算机算法设计与分析第五章思维导图知识点总结 ( 初稿 )
复习链接 计算机算法设计与分析第一章思维导图 计算机算法设计与分析第二章思维导图&&知识点总结 计算机算法设计与分析第三章思维导图&&知识点总结 计算机算法设计与分析第 ...
- ZL15轮式装载机变速器设计 z型提升机图 400吨四柱式油压机图 火电厂堆料机CAD图 万能砂带机 移动皮带机 胶带机 电火花线切割机床封箱机 汽车发动机 曲轴零件图 …方案
火电厂堆料机CAD图 2M5210WA型万能砂带机.exb 卷扬机dwg图纸一套 DSY500-6米移动皮带机(套图18张) 9-26-8D离心风机全套图 630钢丝胶带斗式提升机 4100柴油机曲轴 ...
最新文章
- kettle 表输入 显示重复_表输入插件详解
- Js~对数组进行分组户数
- UIDatePicker 日期/时间选取器(滚轮)—IOS开发
- linux qos 软件,linux下QOS:应用篇 - 博客 - 伯乐在线
- 计算机网络之网络层:12、网络层设备
- java referencequeue_java源代码 Reference和ReferenceQueue分析
- java关键字与解释_5.Java基础知识-注释和关键字
- C实现NV12转I420
- pytorch使用DCN
- 通过路由器端口映射实现远程桌面连接
- Unity3D 中实现毛笔效果
- 糜烂性胃炎吃什么药?
- 学习编程先学什么?怎么学习编程?
- Spring整合日志框架Log4j2
- 如何做一名主程之Unity3D网络游戏服务器架构设计
- 机械键盘按键不灵敏怎么办、机械键盘按键坏了怎么办、维修机械键盘
- iPhone X用户需要知道的12个隐藏小技巧 条条实用
- svn主干删除build.sh重新提交报错“处于冲突状态;请在新增之前标记冲突为已经解决”
- 中秋主题html,中秋节创意主题策划方案
- EasyConnect服务器启动失败,建议关闭浏览器后重新登录
热门文章
- (二)注释(comment)详解
- ImportError: cannot import name ‘PILLOW_VERSION‘ from ‘PIL‘ (/home/user8/anaconda3/envs/FCOS/lib/pyt
- php导入mib表,导入mib库并获取负载均衡F5的Mib信息
- 隐藏桌面上计算机图标不见了怎么办,电脑的快捷图标不见了怎么办
- 卡内基梅隆大学计算机专业录取难,跨专业申请卡内基梅隆大学计算机录取
- Bezier曲线及其de casteljau算法 matlab实现
- 面试题:spring的循环依赖问题以及如何解决
- OpenWrt固件刷入及相关实验
- 写一个iOS复杂表单的正确姿势
- 高端制造业企业信息化解决方案,工业电商平台设备、数据、体系预测性维护