Java实现棋盘覆盖

本文介绍了如何使用Java解决棋盘覆盖问题。当棋盘(大小为2的k次方乘2的k次方)中有一个特殊方格时,目标是用L型骨牌覆盖所有非特殊方格,不允许骨牌重叠。解题策略是将棋盘分为四个部分,递归判断并填充。代码实现给出了详细的覆盖过程。
摘要由CSDN通过智能技术生成

题目描述:

在一个n×n (n = 2的k次方)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。
在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。

输入:

多组测试用例,每组测试用例包括两部分,
第一部分为方格的宽度n,
第二部分则为方格,特殊方格为-1,其他方格为0。

输出:

输出覆盖后的方案

解题思路:

由题可知,这主要棋盘的格数是4的k次方。我们主要是在把这个棋盘分成四部分,判断其是否有特殊方格,如果有,就不添加特殊方格,没有,就添加特殊方格(左上角这个区域填右下角这个方格,右上角填左下角这个方格,左下角这个区域填右上角这个方格,右小角填左上角这个方格),直到全部填完。

代码:

import java.util.Scanner;

public class DemoFour {
   
    static int boardCodeGlobal = 1;

    public static void main(String[] args) {
   
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
   
            int arrrayDimension = sc.nextInt();
            int[][] arr = new int[arrrayDimension][arrrayDimension];
            int dY = 0, dX = 0;
            for (int i = 0; i < arrrayDimension; i++) {
   
                for (int j 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值