分治学习之棋盘覆盖问题(java)

JAVA算法:棋盘覆盖算法(经典算法问题) JAVA算法:棋盘覆盖算法(经典算法问题) 经典算法问题:在一个2^k×2^k (k≥0)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为特殊方格。显然,特殊方格在棋盘中可能出现的位置有4^k种,因而有4^k种不同的棋盘,下图(1)所示是k=2时16种棋盘中的一个。棋盘覆盖问题(chess cover problem)要求用图(2)所示的4种不同形状的L型骨牌覆盖给定棋盘上除特殊方格以... 阅读详情
package FZ;
/*
2 0 3 3
2 2 1 3
4 1 1 1
4 4 1 1
棋盘一个特殊点用L型的棋子进行覆盖
//进行分治法计算 然后分成更小的 比如4分成2,2,2,2 的矩阵 然后进行继续分 分成1,1,1,1的标明其他非特殊点
 */
public class ChessBoradProblem {
    private int[][] board;//棋盘
    private int specialRow;//特殊的行
    private int specialCol;//特殊的列、
    private int size;
    private int type=0;
    public ChessBoradProblem(int specialRow,int specialCol,int size){
        this.specialRow=specialRow;
        this.specialCol=specialCol;
        this.size=size;
        this.board=new int[size][size];
    }
    /*
        board棋盘
        specialRow特殊行
        specialCol特殊的列
        leftRow矩阵最左边的行
        leftCol矩阵最左边的列
        size 棋盘的大小
     */
    private void ChessBoard(int specialRow,int specialCol,int leftRow,int leftCol,int size){

        if (size==1){
            return;
        }
        int subsize=size/2;
        type=type%4+1;
        int n=type;
            //特殊点在左上角
            if (specialRow<leftRow+subsize&&specialCol<leftCol+subsize){
                ChessBoard(specialRow,specialCol,leftRow,leftCol,subsize);
            }else {
                board[leftRow+subsize-1][leftCol+subsize-1]=n;
                ChessBoard(leftRow+subsize-1,leftCol+subsize-1,leftRow,leftCol,subsize);
            }
            //特殊点在右上角
        if (specialRow<leftRow+subsize&&specialCol>=leftCol+subsize){
            ChessBoard(specialRow,specialCol,leftRow,leftCol+subsize,subsize);
        }else {
                board[leftRow+subsize-1][leftCol+subsize]=n;
                ChessBoard( leftRow+subsize-1, leftCol+subsize, leftRow, leftCol+subsize, subsize);
        }
        //特殊点在左下角
        if (specialRow>=leftRow+subsize&&specialCol<leftCol+subsize){
                ChessBoard( specialRow, specialCol, leftRow+subsize, leftCol, subsize);
        }else {
            board[leftRow+subsize][leftCol+subsize-1]=n;
            ChessBoard( leftRow+subsize, leftCol+subsize-1, leftRow+subsize, leftCol, subsize);
        }
        //特殊点在右下角
        if (specialRow>=leftRow+subsize&&specialCol>=leftCol+subsize){
            ChessBoard( specialRow, specialCol, leftRow+subsize, leftCol+subsize, subsize);
        }else {
            board[leftRow+subsize][leftCol+subsize]=n;
            ChessBoard( leftRow+subsize, leftCol+subsize, leftRow+subsize, leftCol+subsize, subsize);
        }
    }
    public void prentfBoard(){
        ChessBoard(specialRow,specialCol,0,0,size);
        for (int i = 0; i <board.length ; i++) {
            for (int j = 0; j <board.length ; j++) {
                System.out.print(board[i][j]+" ");
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        int specialRow=0;
        int specialCol=1;
        int n=4;
        ChessBoradProblem a=new ChessBoradProblem(specialRow,specialCol,n);
       a.prentfBoard();
    }
    
}

 

分治法解决棋盘覆盖问题 分治法实现棋盘的“3-L形”完全覆盖,java实现。 立即下载

相关推荐

棋盘覆盖问题的实现

利用Java实现棋盘的覆盖,输入k,以及特殊坐标,求得覆盖后的棋盘。

算法笔记——【分治法】棋盘覆盖

在一个2^k * 2^k个方格组成的棋盘中,有一个方格与其它的不同,若使用以下四种L型骨牌覆盖除这个特殊方格的其它方格,如何覆盖。四个L型骨牌如下图:        棋盘中的特殊方格如图:        实现的基本原理是将2^k * 2^k的棋盘分成四块2^(k - 1) * 2^(k - 1)的子棋盘,特殊方格一定在其中的一个子棋盘中,如果特殊方格在某

走在冷风中的博客 1216

算法分治 汉诺塔、棋盘覆盖 JAVA图形演示

有详细注释哈、、没资源分了,就随便传了一个,拜托了。。

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

介绍分治算法的基本要素、实现步骤,以及如何利用分治法求解棋盘覆盖问题

qq_32792547的博客 2129

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

主要介绍了Java基于分治算法实现的棋盘覆盖问题,简单描述了棋盘覆盖问题,并结合具体实例形式分析了java基于分治算法实现棋盘覆盖问题的相关操作技巧,需要的朋友可以参考下

分治法案例-残缺棋盘覆盖问题-JAVA实现

使用JAVA解决残缺棋盘覆盖问题:一个n*n的棋盘上有一个缺陷点,该点不能被覆盖,剩下的格子全部用三盒板覆盖。应用的是分治法。

分治算法——附棋盘覆盖问题的java代码实现

分治算法基本概念   在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……    任何一个可以用计算机求解的问题所需的计算时间都与其规模...

likunkun__的博客 8875

别再买错磁铁了!手把手教你为TLE5012B/AS5047等磁编码器选配和安装径向充磁磁铁

本文详细解析了为TLE5012B/AS5047等磁编码器选配和安装径向充磁磁铁的关键要点。从充磁方向的物理本质到供应商沟通技巧,再到安装工艺的黄金法则,帮助工程师避免常见错误,确保磁编码器稳定工作。特别强调了径向充磁的重要性及验证方法,并提供了尺寸选择、温度特性和抗干扰设计的实用建议。

weixin_26750481的博客 314

java棋盘覆盖分治法_算法java实现--分治法--棋盘覆盖问题

棋盘覆盖问题的java实现(分治法)具体问题描述以及C/C++实现参见网址http://blog.youkuaiyun.com/liufeng_king/article/details/8477868/*** 棋盘覆盖问题--分治法*/public class Qipanfugai {public int tile = 1;public int[][] board;//整型数组保存棋盘public Qipan...

weixin_34518190的博客 288

Zynq实战:如何用AXI4-Stream To Video Out实现HDMI视频输出(附时序调试技巧)

本文详细介绍了基于Zynq平台使用AXI4-Stream To Video Out IP核实现HDMI视频输出的工程化解决方案。内容涵盖系统架构设计、AXI4-Stream接口优化、异步FIFO配置、时序同步调试技巧等核心环节,特别针对1080p60视频输出提供具体参数配置和性能优化建议,帮助开发者快速构建稳定的视频处理系统。

sql99的博客 462

医疗领域BGE-M3模型微调全流程:从数据准备到效果评估

本文详细介绍了医疗领域BGE-M3模型的微调全流程,从数据准备到效果评估。通过医疗数据微调,BGE-M3模型在临床问答、病历检索等场景中表现显著提升,能够准确理解医学术语之间的细微差别。文章还提供了实战练习代码和效果评估指标,帮助开发者快速掌握医疗文本嵌入模型的应用技巧。

weixin_29098367的博客 281

棋盘覆盖问题(Java)

棋盘覆盖问题(Java)

优快云2022博客之星Top39;华为云博主7&,优快云、稀土掘金、微信公众号、阿里云开发者社区、腾讯云社区、博客园、知乎、51CTO同名博主WHYBIGDATA; 1787

32位MIPS流水线CPU设计

32位MIPS流水线CPU设计(vivado)

m0_51320209的博客 3199

棋盘覆盖

第一次写博客,还请各位大牛多多指教。初学java,还在进步中,正在学算法,觉得还可以,就敲了敲,希望对和我一样正在奋斗的学习者有用。 //题目是:棋盘覆盖 public class ChessBoard { static int board_size=4; static int tile=1; static int [][] board=new int[board_size][boa

Zhongyou2010的专栏 917

ERA5获取的风场数据转换为.dfs2文件

ERA5获取风场数据的具体步骤可以参考下面的文章下载好后应该是.nc格式的文件,想要读取或者转换成其他格式的文件可以安装下面步骤,本文介绍如何转换为.dfs2文件。

我的博客 1459

WPF中使用TreeView封装组合控件TreeView+DataGrid

wpf的功能非常强大,很多控件都是原生的,但是要使用TreeView+DataGrid的组合,就需要我们自己去封装实现。功能如上图所示, 目前基本上把常用的样式都实现了,购买源码后,可以自行修改样式。本文源码效果如下,(搞了好几天,的确有难度,所以源码也收费,便宜,赚点辛苦费)第一种:技术的选择是TreeView(也就是本文的演示)。这2个图都是第三方控件自带的,并且都是收费使用。首先说明一下,实现上面的效果,有3种方法。本文演示的是使用TreeView的实现。第二种:技术的选择是DataGrid。

故里2130 1650

2024年Java编程:分治算法,网易的朋友给我这份339页的Java面经

金三银四到了,送上一个小福利!① 二分搜索② 大整数乘法③ 棋盘覆盖④ 合并排序⑤ 快速排序⑥ 线性时间选择⑦ 最接近点对问题⑧ 循环赛日程表⑨ 汉诺塔分治算法的基本步骤分治法在每一层递归上都有三个步骤:分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题合并:将各个子问题的解合并为原问题的解。分治(Divide-and-Conquer§)算法设计模式如下:其中|P|表示问题P的规模;

2401_83977689的博客 770

在iPad上使用Python进行编程

如果你拥有一台iPad,并且想在上面编写和运行Python代码,你会发现iPad提供了一些适用的工具和应用程序来满足你的需求。安装一个Python解释器应用程序,编写和运行Python代码,使用第三方库和模块,以及存储和共享代码,这些步骤将帮助你在iPad上进行Python编程。要在iPad上运行Python代码,首先需要安装一个Python解释器。这些应用程序提供了一个交互式的开发环境,允许你编写、编辑和运行Python代码。一旦你安装了Python解释器应用程序,你可以开始编写Python代码了。

2301_79366435的博客 4624

Java 实现棋盘覆盖问题:分治法的巧妙应用

通过使用分治法,我们成功地解决了棋盘覆盖问题。这种方法不仅思路清晰,而且代码实现也相对简洁。分治法在很多算法问题中都有广泛的应用,通过对棋盘覆盖问题的学习和实践,我们可以更好地理解和掌握分治法的思想和应用技巧。希望本文能对大家在算法学习和实践中有所帮助,欢迎大家交流讨论。

2302_80667735的博客 1510

华为OD新系统机试真题-文章特征提取

华为OD机试新系统真题 【文章特征提取】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统机试真题【文章特征提取】

qq_45776114的博客 729

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

用分治策略解决棋盘覆盖问题

    在一个2^k * 2^k的方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。    在棋盘覆盖问题中,要用到下图所示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。易知在任何一个2^k * 2^k的棋盘覆盖中,用到的L型骨牌个数恰好为(4^k -1)/3。         图一 k=2时的一个特殊棋盘                                      图二 4种不同形态的L型骨牌 

☞ 刘小文的专栏 2543

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

棋盘覆盖问题详解(递归)

棋盘覆盖问题详解(java,分治,递归,非递归)

m0_55534317的博客 7572

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

算法系列(一):分治策略--棋盘覆盖

算法系列(一):棋盘覆盖 一、分析 问题描述:   图1-1 k=2时的一个特殊棋盘 在一个 2^k * 2^k 个方格组成的棋盘中,若恰有一个方格与其它方格不同,则称该方格为一特殊方格,且称该棋盘为一特殊棋盘。显然特殊方格在棋盘上出现的位置有 4^k 种情形。因而对任何 k>=0 ,有 4^k 种不同的特殊棋盘。图1-1中的特殊棋盘为 k=2 时 16 个特殊棋盘中的一个。

Sherly. 1万+

【分治法】棋盘覆盖问题java实现

文章目录问题描述问题分析算法设计java代码 问题描述 在一个2k × 2k个放个中,恰好只有一个方格是残缺的。也就是在这个棋盘中有一个方格与其它的格子不同, 我们称这种棋盘为残缺棋盘。 下图所示k=2时,也就是一个22 × 22的棋盘,其中第一行第二列这个方格为一个与众不同的方格。 覆盖是指,用L型骨牌覆盖残缺棋盘上所有方格,覆盖是要求二任何两个L型骨牌不能重叠。 问题分析 首先分析一下用于覆盖的骨牌的情况,那么L型骨牌有几种了? 观察发现,L型骨牌是可以旋转的。经过旋转后有四种情况,如下图所示, 残

xiangjunyes的博客 3551

JAVA实现棋盘覆盖

2、实验一棋盘覆盖 实验内容 输入特殊方格的位置以及棋盘大小(2k个方格即输入k),用分治法实现L型骨牌覆盖磁盘问题,计算结果显示棋盘骨牌覆盖情况(用数字表示) 解题思路 1、采用分治法解决该问题,分治法是将一个规模很大的问题分解为多个规模较小,且类似的子问题,然后递归地解决所有子问题,最后再由子问题的解决得到原问题的解决。 2、将2k×2k棋盘分割为4个相等的子棋盘。特殊方格必位于4个较小子棋盘之一中,其余3个子棋盘中无特殊方格。为了将这3个无特殊方格的子棋盘转化为特殊棋盘,可以用一个L型骨牌覆盖这

不会飞的王 2541

采用分治策略基于Java实现棋盘覆盖问题

采用分治策略实现棋盘覆盖问题4×4棋盘覆盖问题实现全过程图解16×16棋盘覆盖问题 采用分治策略实现棋盘覆盖问题 核心代码参照《计算机算法设计与分析(第五版)》 public class Solution { static int tile = 1;//L型骨牌号 static int board[][];//棋盘 public static void main(String []args) { int tableRow = 0; //棋盘起始行 int tableCol = 0; //棋盘.

_ux_uad 516
上一篇: 背包问题(贪心java)
下一篇: 分治学习之循环比赛(java)
ArchitectDream
博客等级 码龄9年 48粉丝 288原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值