棋盘覆盖-分治法(代码实现)
这是棋盘覆盖的代码实现,至于原理,请参考我的上一篇博客:棋盘覆盖问题-分治法
实现的效果如下:
或者如下:
其中0表示递归过程中标记的所有奇异点
实现代码如下:
//棋盘大小size, 奇异点的坐标(x,y),以及棋子初始的标记值,可随意public static int[][] chessBoard(int size, int jx, int jy, int tag ){if(size == 2){int [][]re = new int[2][2];for(int x = 0 ; x<2; x++)for(int y = 0 ; y<2; y++)if(!(x == jx && y == jy))re[x][y] = tag;return re;}else{;if(jx < size/2 && jy < size/2)//奇异点在左上角return MatrixBlockPlus(chessBoard(size/2,jx,jy,++tag),chessBoard(size/2,size/2 - 1, 0,++tag),chessBoard(size/2,0,size/2 -1,++tag), chessBoard(size/2,0,0,++tag));else if(jx < size/2 && jy >= size/2)//奇异点在右上角return MatrixBlockPlus(chessBoard(size/2,size/2 -1,size/2 -1,++tag),chessBoard(size/2,jx, jy - size/2,++tag),chessBoard(size/2,0,size/2 -1,++tag), chessBoard(size/2,0,0,++tag));else if(jx >=size/2 && jy < size/2)//奇异点在左下角return MatrixBlockPlus(chessBoard(size/2,size/2 -1,size/2 -1,++tag),chessBoard(size/2,size/2 -1, 0,++tag),chessBoard(size/2,jx - size/2 ,jy,++tag), chessBoard(size/2,0,0,++tag));else return MatrixBlockPlus(chessBoard(size/2,size/2 -1,size/2 -1,++tag),chessBoard(size/2,size/2 -1, 0,++tag),chessBoard(size/2,0,size/2 -1,++tag), chessBoard(size/2,jx - size/2, jy - size/2,++tag));}}public static int[][] MatrixBlockPlus(int [][]A11, int [][]A12, int [][]A21, int [][]A22){//将A11,A12,A21,A22按照左上,右上,左下,右下的顺序组合成一矩阵。if(A11[0].length+A12[0].length != A21[0].length+A22[0].length || A11.length+A21.length != A12.length+A22.length) return null;int result[][] = new int[A11.length+A21.length][A11[0].length+A12[0].length];for(int i = 0; i<A11.length+A21.length; i++)for(int j = 0; j<A11[0].length+A12[0].length; j++){if(i<A11.length){if(j<A11[0].length){result[i][j] = A11[i][j];}else{result[i][j] = A12[i][j-A11[0].length];}}else{if(j<A12[0].length){result[i][j] = A21[i-A11.length][j];}else{result[i][j] = A22[i-A11.length][j-A12[0].length];}} }return result;}
棋盘覆盖-分治法(代码实现)相关推荐
- java棋盘覆盖分治法,棋盘覆盖-分治法
信 息 工 程 学 院 算法分析 实习报告 学院:信息工程学院 班级:软件工程083 姓名: 学号: 成绩: 一.实习题目 : 棋盘覆盖 二.实习过程 : 1.了解分治法的思想: 将一个难以解决的大问 ...
- java棋盘覆盖分治法_【单选题】实现棋盘覆盖算法利用的算法是( )
A. 分治法 B. 动态规划法 C. 贪心法 D. 回溯法...
1毫居里(1mCi)=()Bq.A.3.7×107B.3.7×108C.3.7×109D.3.7×1010 为了尽可能提高反应堆的总输出功率,就需要进行功率展平,功率展平主要措施有().A.燃料元件分 ...
- 棋盘覆盖问题——分治法——代码清晰易懂
一.运行环境 DevC++ 二.题目描述 棋盘覆盖问题.有一个2^k × 2^k个方格的棋盘,其中恰有一个方格残缺.用下面四种三格板覆盖更大的棋盘. 要求: ①两个三格板不能重叠. ②三格板不能覆盖残 ...
- 手把手教会你-棋盘覆盖算法以及代码实现!!
在一个2k×2k (k≥0)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格. 棋盘覆盖问题要求用如图(b)所示的L型骨牌覆盖给定棋盘上除特殊方格以外的所有方格,且骨牌之间不得有重叠 ...
- (三)棋盘覆盖问题(代码)
1)初始化 import java,util.Scanner public class ChessBoard {int a;//表示初始时黑色格子的行int b;//表示初始时黑色格子的列int ti ...
- 代码分析+原理图解——棋盘覆盖问题-分治法
上算法课时,老师以文字+代码的方式讲了这道题,然而有很多同学反映听的不是太懂, 我们接触事物最直观的就是以图片理解,因此我尝试使用图解法来帮助大家理解. 问题描述: 注意:分治法最核心的一点是:分 ...
- 分治法——棋盘覆盖问题/L形组件填图问题(Java实现)
问题描述 设B是一个n×n棋盘,n=2k,(k=1,2,3,-).用分治法设计一个算法,使得:用若干个L型条块可以覆盖住B的除一个特殊方格外的所有方格.其中,一个L型条块可以覆盖3个方格.且任意两个L ...
- 分治法--棋盘覆盖问题
前几天学分治算法的时候碰到了一个经典的棋盘覆盖问题,现在小周周就来总结一下解题的过程吧,加强我们对分治算法的理解. 棋盘覆盖问题 问题描述:在一个2的K次方乘以2的K次方方格组成的棋盘中,一开始恰有一 ...
- 棋盘覆盖-经典的分治法问题
棋盘覆盖-经典的分治法问题 一.问题概述 二.适用方法 三.代码展示 四.运行结果 五.算法分析 一.问题概述 在一个 2k×2k个方格组成的棋盘中,若恰有一个方格与其他方格不同,称该方格为特殊方格, ...
最新文章
- 46个经典Linux面试题!
- es6--set数组去重,Map数据结构
- 贪心: Array Splitting(数列分段)(洛谷CF1175D)
- 4. linux调用文件计算阶乘前5项和_【题解循环】1091:求阶乘的和
- 使用ctime.h头文件来控制程序延时秒数
- 通信工程学什么计算机知识,通信技术需要学习哪些知识
- 【C语言】从放弃到入门-笔记
- 微信小程序开发教程+工具插件
- 小强的HTML5移动开发之路
- Linux服务器绑定mac与ip,Linux实现ip和mac绑定
- web和APP兼容性测试的关注点(软件测试)
- NAT会话穿越应用程序(STUN)(RFC-5389)
- 服务器迁移实践,物理服务器迁移到阿里云服务器
- 应用程序迁移_加速绿色IT-关于应用程序迁移和重新托管的实用指南
- (附源码)ssm美通留学管理系统 毕业设计 130854
- php apc.dll,php_apc.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
- Python小项目——生成个性二维码
- SQL查询语句大全(转)
- 【RMAN】增量备份学习与实践
- 3PAR证书到期后导致无法连接管理