棋盘覆盖难题

news/2025/9/28 20:22:43/文章来源:https://www.cnblogs.com/tlnshuju/p/19117534

棋盘覆盖难题

2025-09-28 20:19  tlnshuju  阅读(0)  评论(0)    收藏  举报

题目描述

棋盘覆盖问题是一个经典的计算几何问题,给定一个 2^k x 2^k 的棋盘和一个特殊方块,要求用特殊方块覆盖整个棋盘,其中特殊方块除了一个缺口外都是完整的 L 形。现在要求你使用分治法或减治法来解决这个问题。
要求:
1.实现一个函数 void chessboardCover(int board[][MAX], int tr, int tc, int dr, int dc, int size),其中 board 是二维数组表示棋盘,tr 和 tc 是棋盘左上角的行和列,dr 和 dc 是特殊方块的缺口所在的行和列,size 是当前棋盘的大小。
2.使用分治法或减治法思想,将棋盘划分为四个等大小的子棋盘,递归地覆盖子棋盘,直到覆盖完整个棋盘。

输入格式:

输入棋盘的大小指数k
输入特殊方块的缺口位置坐标x和y

输入样例:

2
1 2

输出样例:

2 2 3 3
2 1 0 3
4 1 1 5
4 4 5 5

#include<stdio.h>
#define MAX 128
int tile = 1;
void chessboardCover(int board[][MAX], int tr,int tc,int dr,int dc,int size) {
    if (size==1) return;
    int t=tile++;
    int s=size/2;
    if (dr<tr+s&&dc<tc+s) {
        chessboardCover(board,tr,tc,dr,dc,s);
} else {
    board[tr + s - 1][tc + s - 1] = t;
        chessboardCover(board, tr, tc, tr + s - 1, tc + s - 1, s);
}
    // 覆盖右上角子棋盘
    if (dr < tr + s && dc >= tc + s) {
                chessboardCover(board, tr, tc + s, dr, dc, s);
    } else {
                board[tr + s - 1][tc + s] = t;
                chessboardCover(board, tr, tc + s, tr + s - 1, tc + s, s);
    }

    // 覆盖左下角子棋盘
    if (dr >= tr + s && dc < tc + s) {
                chessboardCover(board, tr + s, tc, dr, dc, s);
    } else {
                board[tr + s][tc + s - 1] = t;
                chessboardCover(board, tr + s, tc, tr + s, tc + s - 1, s);
    }

    // 覆盖右下角子棋盘
    if (dr >= tr + s && dc >= tc + s) {
                chessboardCover(board, tr + s, tc + s, dr, dc, s);
    } else {
                board[tr + s][tc + s] = t;
                chessboardCover(board, tr + s, tc + s, tr + s, tc + s, s);
    }
}

// 打印棋盘
void printBoard(int board[][MAX], int size) {
        for (int i = 0; i < size; i++) {
                    for (int j = 0; j < size; j++) {
                                    printf("%2d ", board[i][j]);
                    }
                    printf("\n");
        }
}

int main() {
        int board[MAX][MAX] = {0}; // 初始化棋盘

        int k;
        printf("请输入棋盘的大小指数 k:");
        scanf("%d", &k);

        int size = 1 << k; // 计算棋盘大小

        // 假设特殊方块的缺口在 (x, y) 处
        int x, y;
        printf("请输入特殊方块的缺口位置坐标 x 和 y:");
        scanf("%d %d", &x, &y);

        // 覆盖棋盘
        chessboardCover(board, 0, 0, x, y, size);

        // 打印覆盖后的棋盘
        printf("覆盖后的棋盘:\n");
        printBoard(board, size);

        return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/921082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做了个TIFF图片格式转换工具,感觉怎么样?

​在日常办公、图片处理或素材整理场景中,TIFF格式图片因画质高清、支持多层存储的特点被广泛使用,但它也存在文件体积大、兼容性较弱的问题——不少常用软件、社交平台或文档编辑器对TIFF格式支持有限,这时将其转换…

vlookup一定要补足最后的,0)

vlookup一定要补足最后的,0)如题

C#后遗症,掉了个坑,特此记录

String512 str1 = "123123"; 与 String512 str2; str2 = "456"; 有何区别?之前用C#其实是不在意这个问题的,直到今天用CPP写了个String512类,才知道这里面原来还有说法..首先, String512 str1 = …

曾记否 -- Words to be remembered 2025.9.28

曾记否, 在石外楼看旗, 敢面疾风! 节选自 我们的体系, 永不会被表里不一的邪恶势力摧毁一点 -- Words to be remembered 2025.9.28

网站开发需要的技术直接ip访问网站

出品 | 《大咖来了》 一边是企业上云这一毋庸置疑的发展趋势&#xff0c;但另一边&#xff0c;云数据泄露事件的频繁&#xff0c;却让不少企业谈“云”色变。 2020年2月&#xff0c;万豪酒店520万客人信息被泄露&#xff0c;英国信息专员办公室(ICO)对其进行了1840万英镑(约1.…

日常掉坑记录: 关于位操作

char a[8] = { 0x01, 0x02, 0x03, 0x04 };int b = 0;memcpy(&b, a, 4);char c = (b>>8)&0xFF;c是多少?答案: 0x02掉坑原因: 搞反了小端模式下>>符号的操作结果.右移8位, 指的是变量所包含的字节整…

WPF XAML资源文件中的换行、回车、空格及Tab的转义

符号 十六进制 十进制回车 &#x000D; 换行 &#x000A; 空格 &#x0020; Tab &#x0009;

网站怎么做切换中英文免费制作表格的app

无论在我们的工作中还是在我们的生活中&#xff0c;我们都会用到多线程的知识&#xff0c;今天就给大家讲一下如何使用多线程。 序幕 线程的启动 如何使线程暂停 如何使线程停止 线程的优先级 线程安全相关的问题 我们首先要知道进程和线程分别是什么&#xff1f; 进程 - 进…

广州番禺网站公司做那种事情的网站

ChatGPT无限次数:点击直达 ChatGPT 专属指南&#xff1a;利用ChatGPT提升论文写作效率 引言 随着人工智能技术的不断发展&#xff0c;如今许多工具被开发出来&#xff0c;以帮助人们更高效地进行各种工作。其中&#xff0c;ChatGPT作为一个强大的语言生成模型&#xff0c;不仅…

longchain4j 学习系列(2)-调用远程deepseek

接上一篇继续,longchain4j支持open-ai兼容的各种模式,包括deepseek 一、修改pom依赖1 <!-- LongChain4j OpenAI Integration (支持DeepSeek) --> 2 <dependency> 3 <groupId>dev.langchain4j&…

收汇核销简介

收汇核销是我国外汇管理制度中的一项核心环节,目的是确保“货物确实出口、外汇确实收回”,防止虚假出口、骗税、热钱流入等风险。虽然 2012 年起全面电子化,不再盖章,但“核销”逻辑仍在系统后台运行,是出口企业办…

macOS 彻底卸载和重装 Node.js 指南

彻底卸载 Node.js 卸载步骤 # 1. 卸载 npm sudo npm uninstall npm -g# 2. 删除 Node.js 核心文件和配置 sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.* sudo rm -rf /…

2025最新国内过滤器品牌 TOP10 权威测评推荐厂家与选购指南

随着工业制造、环保水处理、医疗净化等领域的快速发展,过滤器作为关键配套设备,其性能与品质直接影响生产效率、产品质量及环境安全。2025 年国内过滤器市场呈现技术迭代加速、细分场景需求升级的特点,企业对过滤器…

Python 将 HTML 转换为纯文本 TXT (HTML 文本提取) - 实践

Python 将 HTML 转换为纯文本 TXT (HTML 文本提取) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

0135_MVC 设计模式:让代码架构更清晰

MVC 设计模式:让代码架构更清晰一、什么是 MVC 设计模式? MVC 全称是Model(模型)、View(视图)、Controller(控制器),它不是一种具体的技术,而是一种 “分而治之” 的代码架构思想。核心逻辑是将软件系统的三…

网站建设 意识形态每天能赚30 50元的捕鱼游戏

原型模式创建对象不调用原对象的构造函数&#xff0c;是直接copy原对象的浅克隆&#xff1a;对值类型的成员变量进行值的复制,对引用类型的成员变量只复制引用,不复制引用的对象.深克隆&#xff1a;对值类型的成员变量进行值的复制,对引用类型的成员变量也进行引用对象的复制. …

30天Python编程挑战 - 从零基础到全栈开发

30天Python编程挑战是一个完整的Python学习教程,从基础语法到高级应用,涵盖变量、函数、面向对象、Web开发、数据分析等核心内容。通过30天的系统学习,帮助初学者掌握Python编程技能,为数据科学、Web开发和自动化脚…

怎么做淘宝网站推广菏泽市住房和建设局网站

作为域管理员&#xff0c;在日常工作中使用ADUC&#xff08;AD用户和计算机&#xff09;工具在图形界面中进行账号管理操作可谓是家常便饭了。然而一个个增加、移动、删除用户&#xff0c;这样操作有时真的够烦&#xff0c;当管理大批量的账户时&#xff0c;重复操作浪费的时间…

软件工程第一次作业——物品复活系统

时间记录序号 任务(PSP2.1 对应) 说明 耗时(分钟)1 Planning:Estimate(计划与估算) 明确需求、列出功能点、制定实现优先级与时间计划。 102 Development:Analysis(需求分析) 分析数据结构、UI 交互用例、文…

完整教程:【C++】string类的常见接口的使用

完整教程:【C++】string类的常见接口的使用pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &quo…