2k*2k 棋盘覆盖问题
棋盘覆盖问题
- 问题叙述
在一个2k×2k个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。
图示:
实例:
2. 基本思路:
关注的重点是特殊方格,2k2k的棋盘上如果没有特殊点,那么L型骨牌不可能完全覆盖,那么我们分治的思路是,每一个父棋盘分解为4个相同大小的子棋盘,除了本身就有特殊点的一个子棋盘,为另外三个棋盘人工设置3个特殊点,以此满足递归条件;基本情况是11棋盘,直接返回。
- 算法
//tr,tc为当前棋盘的左上角行号列号,dr,dc为特殊点行号列号,size是大小
CHSEEBOARD (tr, tc, dr, dc, size):if size==1 return
//tile是一个全局变量,它不满足递归,用于对人工设置的三个特殊点标记相同的数字t=++tile
//左上角if dr<tr+s && dc<tc+sCHESSBOARD (tr, tc, dr, dc, s)elseboard[tr+s-1][tc+s-1] = t;CHESSBOARD (tr, tc, tr+s-1, tc+s-1, s);
//左下角if dr>=tr+s && dc<tc+sCHESSBOARD (tr+s, tc, dr, dc, s)elseboard[tr+s][tc+s-1] = t;CHESSBOARD (tr+s,tc,tr+s,tc+s-1,s);
//右上角if dr<tr+s && dc>=tc+sCHESSBOARD (tr, tc+s, dr, dc, s)elseboard[tr+s-1][tc+s] = t;CHESSBOARD (tr, tc+s, tr+s-1, tc+s, s);
//右下角if dr>=tr+s && dc>=tc+sCHESSBOARD (tr+s, tc+s, dr, dc, s)elseboard[tr+s-1][tc+s-1] = t;CHESSBOARD (tr+s, tc+s, tr+s, tc+s, s);
复杂度:O(n^2)
T(1)=1
T(n)=4T(n/2)+1
=>T(n)=O(n^2)运行截图
8*8棋盘
源代码
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;int tile = 0;
void chessBoard(vector<vector<int>> & board,int tr, int tc, int dr, int dc, int size)
{if(size==1) return;int t = ++tile;int s = size/2;//左上 if(dr<tr+s && dc<tc+s)chessBoard(board,tr,tc,dr,dc,s);else{board[tr+s-1][tc+s-1] = t;chessBoard(board,tr,tc,tr+s-1,tc+s-1,s);}//左下 if(dr>=tr+s && dc<tc+s)chessBoard(board,tr+s,tc,dr,dc,s);else{board[tr+s][tc+s-1] = t;chessBoard(board,tr+s,tc,tr+s,tc+s-1,s);}//右上 if(dr<tr+s && dc>=tc+s)chessBoard(board,tr,tc+s,dr,dc,s);else{board[tr+s-1][tc+s] = t;chessBoard(board,tr,tc+s,tr+s-1,tc+s,s);}//右下 if(dr>=tr+s && dc>=tc+s)chessBoard(board,tr+s,tc+s,dr,dc,s);else{board[tr+s][tc+s] = t;chessBoard(board,tr+s,tc+s,tr+s,tc+s,s);}
}void Print(const vector<vector<int>> &board)
{int n= board.size();for(int i=0;i<n;i++){for(int j=0;j<n;j++){cout<<setw(2)<<left<<board[i][j]<<" ";}cout<<endl;}
}int main(int argc, char** argv) {vector<vector<int>> board;board.resize(8);for(int i=0;i<board.size();i++){board[i].resize(8);}board[3][3] = 0;chessBoard(board,0,0,3,3,board.size());Print(board); return 0;
}
注:文章中的示例及L型骨牌图片来自于
https://blog.csdn.net/yew1eb/article/details/8776985
2k*2k 棋盘覆盖问题相关推荐
- 棋盘覆盖问题详解(递归)
棋盘覆盖问题详解(分治,非递归) (代码由 java 编写) 1.问题描述 如图(a)所示,k>0时,有一个2k×2k的棋盘,棋盘中任意位置有一个特殊的方格,要求利用图(b)中的4中L型骨牌覆盖 ...
- 算法设计与分析——递归与分治策略——棋盘覆盖
问题描述 棋盘覆盖问题要求在2^k * 2^k 个方格组成的棋盘中,你给定任意一个特殊点,用一种方案实现对除该特殊点的棋盘实现全覆盖. 建立模型如图: 解决方案就是利用分治法,将方形棋盘分成4部分,如 ...
- 棋盘覆盖问题C++版
经典的棋盘覆盖问题描述如下:有一个2k∗2k的方格棋盘,有一个方格为特殊方格,除此方格外其余的方格可用L型骨牌覆盖,且任意一个方格不能同时被两个或更多骨牌覆盖. 棋盘覆盖问题可以用递归思想,因为棋盘规 ...
- 棋盘覆盖问题C++求解
问题描述 在一个2k×2k个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘. 在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方 ...
- 分治法:快速排序棋盘覆盖
目标 使用分治法解决快速排序问题 使用分治法解决棋盘覆盖问题 原理 一.快排原理 排序算法在工作中最常用,也是学习很多其他算法的前置知识,例如在运用二分查找算法之前,我们通常需要保证数据是有序的,如果 ...
- 练习六(归并排序、第k小元素、棋盘覆盖、大整数乘法)
文章目录 题目 数组合并 归并排序 第k小元素问题 找中位数 棋盘覆盖问题 大整数乘法 题目 数组合并 题目描述 编写一个程序,将两个有序数组合并成一个更大的有序数组,要求时间复杂度为O(n). 输入 ...
- 棋盘覆盖(java实现)
6.2 棋盘覆盖 1.问题描述 在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘.在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给 ...
- 【Java】棋盘覆盖问题
棋盘覆盖问题抓住两点即可: 1.我们将一个大棋盘C分为四块,C的左上角是坐标是(0,0) 这个左上角坐标是用来区分在哪一个小棋盘的,抓住这个左上角的坐标变化 2.我们需要将没有特殊数字的其他三块继续分 ...
- 棋盘覆盖问题--分治策略
问题描述: 在一个2k×2k (k≥0,k为上标)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格.棋盘覆盖问题要求用图(b)所示的4种不同形状的L型骨牌覆盖给定棋盘上除特殊方格以外 ...
最新文章
- springcloud学之前需要掌握什么_学国画之前我们需要准备什么?
- MYSQL韩文显示正常一法
- Altium designer中设置PCB网络闭合(不闭合)
- 输出torch构建的模型结构
- webpack4.0各个击破(3)—— Assets篇
- STM32F103xxx大容量增强型芯片之间有什么区别?(来自STM32神舟系列)
- spark官方文档_Spark机器学习之Pipeline
- 中国中央空调行业竞争力策略及未来发展潜力预测报告2021年版
- Python中的时间序列数据可视化的完整指南
- 50个高端大气上档次的管理后台界面模板
- unity3d Space Game太空射击游戏资源包
- 大神详解开源 BUFF 增益攻略丨直播
- 利用CSS3实现图片3D旋转
- 自己决定,玩客云到底要不要买
- 舟山景区概况 舟山旅游项目介绍
- win10如何设置锁屏时间
- Hu不变矩+BP神经网络,实现对图像的分类(pytorch实现)
- 蚂蚁金服通讯框架学习一
- 已知两点求直线一般方程、点到直线距离、点是否在线上方/下方
- c++计算两个三维向量之间的夹角
热门文章
- 在设计四人抢答器中灯全亮_数电课设四路抢答器的设计
- 汉诺塔问题——分治思想
- iOS PerformSelector 遗漏问题
- 运筹系列16:routing模型之VRP问题
- 基于单片机的自动追日系统设计_一种太阳能光伏支架自动追日系统的制作方法...
- python表达式323的值为_转: Python 运算符与用法
- (附源码)ssm医护服务平台 毕业设计 260954
- PAT甲级 2019年冬季 题解
- mysql 动态sql 解析_MyBatis详解5.动态SQL
- CSS面试题总结,助(祝)2021成功拿到offer