棋盘覆盖 (详细图解)
一、棋盘覆盖
二、解题步骤
1、在给定的8x8的方格中如何实现题目中要求的效果,因需用L型的骨牌覆盖,因其仅占三个格子无法与8x8形成联系,因此我们可以利用分治算法将其划分为小单元,与L型产生联系进行处理。
2、如何使其他格子与特殊格子产生联系;
(1)因我们采用分治算法,依次将大格子进行划分;划分为四个小格子,特殊格子仅位于其中一个,那我们必须给剩余三个格子找出属于他们自己的特殊格子(用箭头标注);
(2)取划分后的四个格子其中一个进一步划分,与(1)的原理一致;
(3)取划分后的四个格子其中一个进一步划分得,与(1)的原理一致;
最终的划分后的格子长度唯1,已无法再进行4等分,则截止;
其余的3个4x4部分也依照此法依次划分;
三、 代码实现
package p4.分治回溯;import java.util.Scanner;//棋盘覆盖问题
public class ChessBoardCoverage {private static int BOARD_SIZE = 8;private static int[][] board = new int[BOARD_SIZE][BOARD_SIZE];//代表颜色 同一组L骨牌 编号应该是一样的private static int title = 0; // 0就是特殊方格的存在public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.print(">>>请输入特殊方格的角标信息:");//dr dc 指的是特殊方格的坐标int dr = input.nextInt();int dc = input.nextInt();chessBoard(0, 0, dr, dc,BOARD_SIZE);printBoard();}private static void printBoard() {for (int i = 0; i < BOARD_SIZE; i++) {for (int j = 0; j < BOARD_SIZE; j++) {System.out.print(board[i][j] + "\t");}System.out.println();}}//在size*size的矩阵中 以tr tc为四部分子矩阵的基点 dr dc是特殊矩阵的位置 进行填充private static void chessBoard(int tr, int tc, int dr, int dc, int size) {//判断递归结束 如果尺寸为1 则不可继续拆分 则返回 归if (size == 1) {return;}//该层要填充L型骨牌 编号是一致的int num = ++title;//该层要继续分四个部分 每个部分的尺寸是多少int s = size / 2;//判断特殊方格在四个部分中 那个部分里//左上if (dr < tr + s && dc < tc + s) {chessBoard(tr,tc,dr,dc,s);} else {board[tr + s - 1][tc + s - 1] = num;chessBoard(tr,tc,tr + s - 1,tc + s - 1,s);}//右上if (dr < tr + s && dc >= tc + s) {chessBoard(tr,tc + s,dr,dc,s);} else {board[tr + s - 1][tc + s] = num;chessBoard(tr,tc + s,tr + s - 1,tc + s,s);}//左下if (dr >= tr + s && dc < tc + s) {chessBoard(tr + s,tc,dr,dc,s);} else {board[tr + s][tc + s - 1] = num;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] = num;chessBoard(tr + s,tc + s,tr + s,tc + s,s);}}}
输出结果:
每种数字代表一种颜色;由图知符合题意;
棋盘覆盖 (详细图解)相关推荐
- centos7安装详细图解_5G基站工程安装详细图解(纯干货)
5G基站是5G网络的核心设备,提供无线覆盖,实现有线通信网络与无线终端之间的无线信号传输.基站的架构.形态直接影响5G网络如何部署.今天小编给大家介绍一下基站的内部结构以及安装的详细图解. 这样复杂的 ...
- PowerDesigner 15.1 安装步骤详细图解及破解
准备工作: 下载 PowerDesigner 15.1 的安装文件和破解文件 PowerDesigner 15.1 下载地址:http://download.sybase.com/eval/Power ...
- 算法系列(一):分治策略--棋盘覆盖
算法系列(一):分治策略--棋盘覆盖 一.分析 问题描述: 图1-1 k=2时的一个特殊棋盘 在一个 2^k * 2^k 个方格组成的棋盘中,若恰有一个方格与其它方格不同,则称该方格为一特殊方格,且 ...
- 棋盘覆盖问题(保姆级解释)
这可是保姆级解释哦! 1.问题描述: 在一个个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格.棋盘覆盖问题要求用如图所示的4种不同形状的L型骨牌覆盖给定棋盘上除特殊方格以外的所有方格 ...
- Android环境变量的设置(详细图解版)
Android环境变量的设置(详细图解版) 转载于:https://www.cnblogs.com/zhujiabin/p/4875182.html
- 递归与分治之棋盘覆盖问题
在一个2^k * 2^k个方格组成的棋盘中,若有一个方格与其他方格不同,则称该方格为一特殊方格,且称该棋盘为一个特殊棋盘. 显然特殊方格在棋盘上出现的位置有4^k种情形.因而对任何k≥0,有4^k种不 ...
- 计算机基础算法棋盘覆盖,分治算法求解棋盘覆盖问题互动教学过程.doc
分治算法求解棋盘覆盖问题互动教学过程 分治算法求解棋盘覆盖问题互动教学过程 摘要:针对算法设计与分析课程难度较大.对学生编程能力要求较高的现状,通过对棋盘覆盖问题的分治算法求解过程进行互动教学设计,引 ...
- linux安装教程6.3,CentOS 6.3安装教程(详细图解)
说明: 1.CentOS 6.3系统镜像有两个,安装系统只用到第一个镜像即CentOS-6.3-i386-bin-DVD1.iso(32位)或者CentOS-6.3-x86_64-bin-DVD1.i ...
- NYOJ 45 棋盘覆盖
以为是分治法那个经典的例子,一看题才知道是大数 棋盘覆盖 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 在一个2k×2k(1<=k<=100)的棋盘中恰有一 ...
最新文章
- python语句x 3 3执行_Python语言中,x=2,y=3,执行x,y=y,x之后,x和y的值分别是什么?...
- 《javascript高级程序设计》笔记:Function类型
- jclouds_使用jclouds在S3上分段上传
- java.util.IdentityHashMap.entrySet()方法实例
- 7-3 DAG图优化-A (15 分)(更新版)
- Angular进阶教程一
- 分位数回归的R语言实现
- vscode c++ 开发环境搭建(离线、内网)
- 51单片机(1)-开发工具介绍及软件安装
- 排列图 - QCC小组活动推行知识系列介绍(三)
- ssd存储的SLC、MLC、TLC闪存芯片颗粒有什么区别?
- 品牌如何赋能加盟商,攻克时艰
- 绿色数据中心空调设计 书评_书评:PHP中的实用设计模式
- 思岚科技即将亮相2019上交会 展示机器人自主行走背后的技术
- 秒杀项目05-页面优化技术
- golang 读一行_与golang合作的第一步
- perl-dbd-mysql qt_perl 安装DBI和DBD
- 开源物联网平台推荐介绍
- Python 爬虫进阶篇——Selenium教程(一)
- 操作系统---栈区与堆区 转自:https://blog.csdn.net/amcp9/article/details/79597481