棋盘覆盖问题抓住两点即可:

1.我们将一个大棋盘C分为四块,C的左上角是坐标是(0,0)

这个左上角坐标是用来区分在哪一个小棋盘的,抓住这个左上角的坐标变化

2.我们需要将没有特殊数字的其他三块继续分治,但是他没有特殊数字,

如果在第一象限,则将右下作为特殊

如果在第二象限,则将左下作为特殊

如果在第三象限,则将右上作为特殊

如果在第四象限,则将左上作为特殊

抓住这两点,问题则迎刃而解

代码:

import java.util.Scanner;

public class ChessBoard {

/*

* 题目描述:在一个n×n (n = 2k)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。

在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。

*/

/*

*

输入

多组测试用例,每组测试用例包括两部分,

第一部分为方格的宽度n,

第二部分则为方格,特殊方格为-1,其他方格为0。

*/

static int number=1;

public static void main(String[] args) {

Scanner sc=new Scanner(System.in);

int n=sc.nextInt();

int array[][]=new int[n][n];

int dr=0;

int dc=0;

for(int i=0;i

for(int j=0;j

array[i][j]=sc.nextInt();

if(array[i][j]==-1) {

dr=i;//将特殊数字的坐标传给函数

dc=j;

}

}

}

chessboard(0,0,dr,dc,n,array);//默认左上角是0,0,-1是特殊数字

for(int i=0;i

for(int j=0;j

System.out.print(array[i][j]+" ");

}

System.out.println();

}

}

private static void chessboard(int i, int j, int dr, int dc, int n, int[][] array) {

// TODO Auto-generated method stub

if(n==1) {

return;//如果只有一个数,就返回

}

int halfsize=n/2;

int t=number++;//这个时候number等于1;做完这一步才变成2;

if(dr

chessboard(i,j,dr,dc,halfsize,array);

}

else {

array[i+halfsize-1][j+halfsize-1]=t;

chessboard(i,j,i+halfsize-1,j+halfsize-1,halfsize,array);

}

if(dr=j+halfsize) {

chessboard(i,j+halfsize,dr,dc,halfsize,array);

}

else {

array[i+halfsize-1][j+halfsize]=t;

chessboard(i,j+halfsize,i+halfsize-1,j+halfsize,halfsize,array);

}

if(dr>=i+halfsize&&dc

chessboard(i+halfsize,j,dr,dc,halfsize,array);

}

else {

array[i+halfsize][j+halfsize-1]=t;

chessboard(i+halfsize,j,i+halfsize,j+halfsize-1,halfsize,array);

}

if(dr>=i+halfsize&&dc>=j+halfsize) {

chessboard(i+halfsize,j+halfsize,dr,dc,halfsize,array);

}else {

array[i+halfsize][j+halfsize]=t;

chessboard(i+halfsize,j+halfsize,i+halfsize,j+halfsize,halfsize,array);

}

}

}

棋盘覆盖问题 java_Java棋盘覆盖问题相关推荐

  1. 棋盘覆盖问题 java_Java基于分治算法实现的棋盘覆盖问题示例

    本文实例讲述了Java基于分治算法实现的棋盘覆盖问题.分享给大家供大家参考,具体如下: 在一个2^k * 2^k个方格组成的棋盘中,有一个方格与其它的不同,若使用以下四种L型骨牌覆盖除这个特殊方格的其 ...

  2. 棋盘覆盖算法java_棋盘覆盖问题(算法分析)(Java版)

    1.问题描述: 在一个2k×2k个方格组成的棋盘中,若有一个方格与其他方格不同,则称该方格为一特殊方格,且称该棋盘为一个特殊棋盘.显然特殊方格在棋盘上出现的位置有种情形.因而对任何 k≥0,有4k种不 ...

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

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

  4. 详述白盒测试的逻辑覆盖法的判定覆盖及其优缺点

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 详述白盒测试的逻辑 ...

  5. html画布创建黑白象棋棋盘,Canvas绘制象棋棋盘

    学习Canvas可以通过一些例子来增加成就感 一下是一个输出一个象棋棋盘的例子 象棋棋盘 //以要画的点为原点定义四个象限 var pointDefine=[[-1,-1],[1,-1],[-1,1] ...

  6. 覆盖问题:最大覆盖问题(Maximum Covering Location Problem,MCLP)和集覆盖问题(Location Set Covering Problem,LSCP)...

    集覆盖问题研究满足覆盖所有需求点顾客的前提下,服务站总的建站个数或建 设费用最小的问题.集覆盖问题最早是由 Roth和 Toregas等提出的,用于解决消防中心和救护车等的应急服务设施的选址问题,他们 ...

  7. 详解软件测试中白盒测试基本概念及四种白盒测试方法以及六种逻辑覆盖法(语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖)

    在这篇文章中,我们将讲解白盒测试的基本概念,以及四大常用的白盒测试方法. 一.白盒测试基本概念 1.白盒测试的定义 白盒测试又称为结构测试或逻辑驱动测试,它是把测试对象看成一个透明的盒子,它允许测试人 ...

  8. 隧道无线通信覆盖与隧道调频广播覆盖方案

    2021-04-13 11:04 隧道无线通信覆盖与隧道调频广播覆盖方案 (隧道无线通信覆盖与隧道调频广播覆盖解决方案,是将调频广播.无线调度.公安对讲.消防对讲四种无线电信号在隧道内共用辐射型泄漏电 ...

  9. 【java基础18:方法覆盖与多态】什么时候使用方法覆盖 toString方法的覆盖 多态的基础语法与作用 向上/向下转型

    目录 方法覆盖Override 多态 方法覆盖Override 方法覆盖初体验,什么样的程序要方法覆盖 /*当前程序存在的问题(设计上的问题)??鸟儿在执行move()方法的时候,最好输出的结果是:& ...

最新文章

  1. UUID.randomUUID()生成唯一识别码
  2. Non-Blind图像反卷积论文整理
  3. Linux从入门到精通——磁盘与目录的容量(du、df)
  4. 特意向大家推荐.NET技术圈一些优秀开发者的公众号
  5. C语言写数据库(三)
  6. oracle如何并发重建索引,oracle数据库如何重建索引?
  7. 大数据集群搭建之节点的网络配置过程(二)
  8. PyQt5 关于自动补全 QCompleter
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的网上试衣间设计
  10. 这些进程的后台可靠运行命令你都知道了吗
  11. css中的clip:rect() 只能在绝对定位的元素上使用
  12. win10 预览版启用 Hyper-V 虚拟机 装 boot2docker找不到菜单按钮问题
  13. linux开机时驱动的加载流程
  14. MATLAB神经网络工具箱学习
  15. 雷霄骅---巨星陨落
  16. 计算机考研828是什么意思,浙江大学828计算机程序设计基础考研复习经验
  17. 苹果7pnfc功能门禁卡_苹果7手机nfc怎么开启 苹果手机门禁卡nfc功能
  18. git中的origin
  19. 数据中心网络融合技术DCB漫谈
  20. 记忆里:小时候的农村青山绿水,鸟语花香,彩蝶飞飞

热门文章

  1. dns隧道攻击原理及常用工具流量分析
  2. 根据出生日期,得出年龄
  3. PCL点云处理之车载建筑物点云立面提取(三十二)
  4. 向量操作与坐标转换相关方法
  5. python等距分箱
  6. 听不进真话,是穷人最大的困境
  7. 观察者模式之Tom and Jerry
  8. 微服务微应用的安全测试_如何降低微服务测试成本?经验之谈
  9. setw()和setfill()
  10. Calendar类要点、易错点Calendar中的DATE 和 DAY_OF_MONTH 和 DAY_OF_YEAR