这是棋盘覆盖的代码实现,至于原理,请参考我的上一篇博客:棋盘覆盖问题-分治法

实现的效果如下:

或者如下:

其中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;}

棋盘覆盖-分治法(代码实现)相关推荐

  1. java棋盘覆盖分治法,棋盘覆盖-分治法

    信 息 工 程 学 院 算法分析 实习报告 学院:信息工程学院 班级:软件工程083 姓名: 学号: 成绩: 一.实习题目 : 棋盘覆盖 二.实习过程 : 1.了解分治法的思想: 将一个难以解决的大问 ...

  2. java棋盘覆盖分治法_【单选题】实现棋盘覆盖算法利用的算法是( ) A. 分治法 B. 动态规划法 C. 贪心法 D. 回溯法...

    1毫居里(1mCi)=()Bq.A.3.7×107B.3.7×108C.3.7×109D.3.7×1010 为了尽可能提高反应堆的总输出功率,就需要进行功率展平,功率展平主要措施有().A.燃料元件分 ...

  3. 棋盘覆盖问题——分治法——代码清晰易懂

    一.运行环境 DevC++ 二.题目描述 棋盘覆盖问题.有一个2^k × 2^k个方格的棋盘,其中恰有一个方格残缺.用下面四种三格板覆盖更大的棋盘. 要求: ①两个三格板不能重叠. ②三格板不能覆盖残 ...

  4. 手把手教会你-棋盘覆盖算法以及代码实现!!

    在一个2k×2k (k≥0)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格. 棋盘覆盖问题要求用如图(b)所示的L型骨牌覆盖给定棋盘上除特殊方格以外的所有方格,且骨牌之间不得有重叠 ...

  5. (三)棋盘覆盖问题(代码)

    1)初始化 import java,util.Scanner public class ChessBoard {int a;//表示初始时黑色格子的行int b;//表示初始时黑色格子的列int ti ...

  6. 代码分析+原理图解——棋盘覆盖问题-分治法

    上算法课时,老师以文字+代码的方式讲了这道题,然而有很多同学反映听的不是太懂, 我们接触事物最直观的就是以图片理解,因此我尝试使用图解法来帮助大家理解. 问题描述:   注意:分治法最核心的一点是:分 ...

  7. 分治法——棋盘覆盖问题/L形组件填图问题(Java实现)

    问题描述 设B是一个n×n棋盘,n=2k,(k=1,2,3,-).用分治法设计一个算法,使得:用若干个L型条块可以覆盖住B的除一个特殊方格外的所有方格.其中,一个L型条块可以覆盖3个方格.且任意两个L ...

  8. 分治法--棋盘覆盖问题

    前几天学分治算法的时候碰到了一个经典的棋盘覆盖问题,现在小周周就来总结一下解题的过程吧,加强我们对分治算法的理解. 棋盘覆盖问题 问题描述:在一个2的K次方乘以2的K次方方格组成的棋盘中,一开始恰有一 ...

  9. 棋盘覆盖-经典的分治法问题

    棋盘覆盖-经典的分治法问题 一.问题概述 二.适用方法 三.代码展示 四.运行结果 五.算法分析 一.问题概述 在一个 2k×2k个方格组成的棋盘中,若恰有一个方格与其他方格不同,称该方格为特殊方格, ...

最新文章

  1. 46个经典Linux面试题!
  2. es6--set数组去重,Map数据结构
  3. 贪心: Array Splitting(数列分段)(洛谷CF1175D)
  4. 4. linux调用文件计算阶乘前5项和_【题解循环】1091:求阶乘的和
  5. 使用ctime.h头文件来控制程序延时秒数
  6. 通信工程学什么计算机知识,通信技术需要学习哪些知识
  7. 【C语言】从放弃到入门-笔记
  8. 微信小程序开发教程+工具插件
  9. 小强的HTML5移动开发之路
  10. Linux服务器绑定mac与ip,Linux实现ip和mac绑定
  11. web和APP兼容性测试的关注点(软件测试)
  12. NAT会话穿越应用程序(STUN)(RFC-5389)
  13. 服务器迁移实践,物理服务器迁移到阿里云服务器
  14. 应用程序迁移_加速绿色IT-关于应用程序迁移和重新托管的实用指南
  15. (附源码)ssm美通留学管理系统 毕业设计 130854
  16. php apc.dll,php_apc.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
  17. Python小项目——生成个性二维码
  18. SQL查询语句大全(转)
  19. 【RMAN】增量备份学习与实践
  20. 3PAR证书到期后导致无法连接管理

热门文章

  1. .net core 开发 Windows Forms 程序
  2. springboot ServletContextListener接口
  3. 【Liunx】Linux 简介
  4. C#设计模式之5-单例模式
  5. pdm vault 使用_如何使用Key Vault连接器更好地保护Logic Apps中的秘密
  6. alexa技能个数_如何改善Alexa技能的对话流程
  7. 复习django项目三——视图显示模板templates
  8. Java多线程:线程停止
  9. python通用爬虫和聚焦爬虫的区别
  10. 属性property