当前位置: 首页 > news >正文

分治法求解棋盘覆盖问题

分治法求解棋盘覆盖问题

如何应用分治法求解棋盘覆盖问题呢?分治的技巧在于如何划分棋盘,使划分后的子棋盘的大小相同,并且每个子棋盘均包含一个特殊方格,从而将原问题分解为规模较小的棋盘覆盖问题。

基本思路

棋盘覆盖问题是指在一个大小为2n * 2n的棋盘上,去掉其中一个方格后,用L型骨牌(覆盖3个方格)将其完全覆盖。分治法是一种解决该问题的有效算法。

当 k>0 时,将 2^k * 2^k 棋盘分割为 4 个 2^(k-1) * 2^(k - 1)子棋盘,如下图(f)所示。特殊方格必位于4 个较小子棋盘之一种,其余 3 个子棋盘中无特殊方格。为了将这 3 个无特殊方格的子棋盘转化为特殊棋盘,可以用一个 L 型骨牌覆盖这 3 个较小棋盘的会合处,如下图(g)所示。从而将原问题转化为 4 个较小规模的棋盘覆盖问题。递归地使用这种分割,直至棋盘简化为棋盘 1*1。
在这里插入图片描述

代码实现

#include <stdio.h>
int board[100][100] = { 0 };
int tile = 1;
//棋盘覆盖 
void ChessBoard(int tr, int tc, int dr, int dc, int size) {if (size == 1)return;int t = ++tile,s = size / 2;//覆盖左上角棋盘if (dr < tr + s && dc < tc + s)//特殊方格在棋盘中{ChessBoard(tr, tc, dr, dc, s);}else {//特殊方格不在棋盘中,则从中间覆盖一个方格board[tr + s - 1][tc + s - 1] = t; //赋值特殊方格类型ChessBoard(tr, tc, tr + s - 1, tc + s - 1, s);//从左上角继续划分 }//覆盖右上角棋盘if (dr < tr + s && dc >= tc + s)//特殊方格在棋盘中{ChessBoard(tr, tc + s, dr, dc, s);}else {//特殊方格不在棋盘中,则从中间覆盖一个方格board[tr + s - 1][tc + s] = t; //赋值特殊方格类型ChessBoard(tr, tc + s, tr + s - 1, tc + s, s);//从右上角继续划分 }//覆盖左下角棋盘if (dr >= tr + s && dc < tc + s)//特殊方格在棋盘中{ChessBoard(tr + s, tc, dr, dc, s);}else {//特殊方格不在棋盘中,则从中间覆盖一个方格board[tr + s][tc + s - 1] = t; //赋值特殊方格类型ChessBoard(tr + s, tc, tr + s, tc + s - 1, s);//从左下角继续划分 }//覆盖右下角棋盘if (dr >= tr + s && dc >= tc + s)//特殊方格在棋盘中{ChessBoard(tr + s, tc + s, dr, dc, s);}else {//特殊方格不在棋盘中,则从中间覆盖一个方格board[tr + s][tc + s] = t; //赋值特殊方格类型ChessBoard(tr + s, tc + s, tr + s, tc + s, s);//从左下角继续划分 }
}
int  main(void) {int size, dr, dc;printf("请输入棋盘的行或列号:");scanf("%d", &size);printf("请输入特殊方格的行或列号:");scanf("%d %d", &dr, &dc);board[dr][dc] = 1;ChessBoard(0, 0, dr, dc, size);for (int i = 0;i < size;i++) {for (int j = 0;j < size;j++)printf("%d\t", board[i][j]);printf("\n");}return 0;
}

运行结果

在这里插入图片描述
如上图所示,相同的数字就代表了一个L型的骨牌。

相关文章:

分治法求解棋盘覆盖问题

分治法求解棋盘覆盖问题 如何应用分治法求解棋盘覆盖问题呢&#xff1f;分治的技巧在于如何划分棋盘&#xff0c;使划分后的子棋盘的大小相同&#xff0c;并且每个子棋盘均包含一个特殊方格&#xff0c;从而将原问题分解为规模较小的棋盘覆盖问题。 基本思路 棋盘覆盖问题是…...

爱写bug的小邓程序员个人博客

博客网址: http://www.006969.xyz 欢迎来到我的个人博客&#xff0c;这里主要分享我对于前后端相关技术的学习笔记、项目实战经验以及一些技术感悟。 在我的博客中&#xff0c;你将看到以下主要内容&#xff1a; 技术文章 我将会分享我在学习前后端技术过程中的一些感悟&am…...

selenium判断元素可点击、可见、可选

1、判断元素是否可以点击 判断元素是否可以点击&#xff0c;WebElement对象调用is_enabled() is_enabled()方法返回一个布尔值&#xff0c;若可点击返回&#xff1a;True。若不可点击则返回&#xff1a;False from selenium import webdriver import time from selenium.web…...

计算机网络重点概念整理-第六章 应用层【期末复习|考研复习】

计算机网络复习系列文章传送门&#xff1a; 第一章 计算机网络概述 第二章 物理层 第三章 数据链路层 第四章 网络层 第五章 传输层 第六章 应用层 第七章 网络安全 计算机网络整理-简称&缩写 文章目录 前言六、应用层6.1 网络应用模型6.1.1 客户/服务器模式C/S模型6.1.2 P…...

html2pdf

页面布局时将需要保存在同一页pdf的dom元素用div包裹&#xff0c;并为该div添加class类名&#xff0c;例如.convertPDF&#xff0c;如果有多页创建多个.convertPDF这个div&#xff0c;再循环保存pdf即可 用到了html2canvas和JsPdf这两个插件&#xff0c;自行站内搜索安装 pdf页…...

css中页面元素隐藏

display:nonevisibility:hiddenopcity:0页面中不存在存在存在重排会不会不会重绘会会不一定自身绑定事件不触发不触发能触发transition不支持支持支持子元素可复原不能能不能被遮挡的元素可触发事件能能不能 其他&#xff1a; 1.设置height&#xff0c;width&#xff0c;margi…...

dp三步问题

三步问题 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 class Solution { public:int waysToStep(int n) {vector<int> dp(n1,1);if(n1) return 1;dp[1]1;dp[2]2;for(int i3; i<n1; i){dp[i] ((dp[i-1]dp[i-2])%1000000007dp[i-3])%100…...

结构体和联合体嵌套访问

在JSON项目中&#xff0c;使用了联合体和结构体之间的嵌套&#xff0c;但是在访问内部的联合体和结构体的时候出现了问题&#xff0c;这篇文章作为记录&#xff0c;也希望能帮助遇到相同问题的好伙伴。 struct lept_value {union {struct str{char *s;size_t len;};double n;}…...

Linux ———— 管理磁盘

&#xff08;一&#xff09;MBR硬盘与GPT硬盘 硬盘按分区表的格式可以分为MBR硬盘与GPT硬盘两种硬盘格式。 MBR 硬盘&#xff1a;使用的是旧的传统硬盘分区表格式&#xff0c;其硬盘分区表存储在MBR(Master Boot Record&#xff0c;主引导区记录&#xff09;内。MBR位于…...

文字的编码

1 字符的编码方式 1.1 ASCII 是“American Standard Code for Information Interchange”的缩写&#xff0c;美国信息交换标准代码。电脑毕竟是西方人发明的&#xff0c;他们常用字母就 26 个&#xff0c;区分大小写、加上标点符号也没超过 127 个&#xff0c;每个字符用一个字…...

21.9 Python 使用Selenium库

Selenium是一个自动化测试框架&#xff0c;主要用于Web应用程序的自动化测试。它可以模拟用户在浏览器中的操作&#xff0c;如打开网页、点击链接、填写表单等&#xff0c;并且可以在代码中实现条件判断、异常处理等功能。Selenium最初是用于测试Web应用程序的&#xff0c;但也…...

C++初阶2

目录 一&#xff0c;auto关键字 1-1&#xff0c;auto的使用 1-2&#xff0c;基于范围auto的for循环 二&#xff0c;nullptr的运用 三&#xff0c;C类的初步学习 3-1&#xff0c;类的引用 3-2&#xff0c;类的访问权限 3-3&#xff0c;类的使用 1&#xff0c;类中函数的…...

网络安全(黑客)—小白自学

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高&#xff1b; 二、则是发展相对成熟…...

在win10下,使用torchviz对深度学习网络模型进行可视化

目录 1. 安装 graphviz 和 torchviz 2.安装 graphviz.exe 3.实例测试 4.如果你的电脑还是无法画图&#xff0c;并且出现了下面的报错&#xff1a; 5.参考文章&#xff1a; 1. 安装 graphviz 和 torchviz 首先打开 Anaconda prompt 进入自己的 pytorch 环境(图中 pt 是我自…...

【自然语言处理】【长文本处理】RMT:能处理长度超过一百万token的Transformer

相关博客 【自然语言处理】【长文本处理】RMT&#xff1a;能处理长度超过一百万token的Transformer 【自然语言处理】【大模型】MPT模型结构源码解析(单机版) 【自然语言处理】【大模型】ChatGLM-6B模型结构代码解析(单机版) 【自然语言处理】【大模型】BLOOM模型结构源码解析(…...

交叉编译工具链(以STM32MP1为例)

1.什么是交叉编译工具链&#xff1f; 在一个系统上进行编译&#xff0c;在另一个系统上进行执行 2.STM32MP1交叉编译工具链 3.交叉编译器内容 4.两种工具链模式 5.两种链接模式 6.工具使用 注意&#xff1a;OpenSTLinux已经提供了编译框架&#xff0c;不需要命令行手工编译 …...

使用 Pyro 和 PyTorch 的贝叶斯神经网络

一、说明 构建图像分类器已成为新的“hello world”。还记得当你第一次接触 Python 时&#xff0c;你的打印“hello world”感觉很神奇吗&#xff1f;几个月前&#xff0c;当我按照PyTorch 官方教程并为自己构建了一个运行良好的简单分类器时&#xff0c;我也有同样的感觉。 我…...

How to install the console system of i-search rpa on Centos 7

How to install the console system of i-search rpa on Centos 7 1、 准备1.1 、查看磁盘分区状态1.2、上传文件1.2.1、添加上传目录1.2.2、上传安装包1.2.3、解压安装包1.2.4、查看安装包结构 1.3、安装依赖包1.3.1、基础依赖包1.3.2 相关依赖 1.4、关闭防火墙1.5、解除SeLin…...

sql--索引使用 ---覆盖索引

覆盖索引 Select 后接 * 走id索引才是最优&#xff0c;使用二级索引则需要回表&#xff08;性能稍差&#xff09; 前缀索引 Create index 索引名 on 表名( 字段名( n ) ) n数字 n代表提取这个字符串的n个构建索引 &#xff1f;&#xff1f;那么 n 为几性能是最好的呢&…...

系统平台同一网络下不同设备及进程的话题通讯--DDS数据分发服务中间件

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言(1)中间件的介绍(2)DDS介绍(3)发布者(4)订阅者(5)idl文件(定义msg结构体)(6)QoS(Quality of Service)策略(7)DDS测试工具介绍(…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...