方格分割(蓝桥杯)

文章目录

  • 方格分割
    • 题目描述
    • 答案:509
    • 思路
    • dfs

方格分割

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

6x6的方格,沿着格子的边线剪开成两部分。 要求这两部分的形状完全相同。

如下就是三种可行的分割法。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

答案:509

思路

在这里插入图片描述
首先,从题目入手,一个方格纸分割成两个相同的部分,首先可以想到剪“格子”,但是剪“格子”这种方法不好判断连通的问题,所以应该换一个思路,换成找切割线,由于是两个相同的部分,所以切割线是关于中心点中心对称的,由线再化到点上去,就转化成了遍历点的思路, 我们可以利用深搜(DFS)来遍历寻找切割方法的总数;

  1. 截至条件为切割到纸的边界处也就是:(x==0||y==0||x==6||y==6)

  2. 设置记忆数组将每次遍历的点做标记,便于判断是否遍历过

注意:题目中说旋转,对称算作一种图形,图案关于中心点中心对称的所以应该除以4

在这里插入图片描述

dfs

这段代码是一个C++程序,用于解决一个方格分割问题。下面是对代码的详细注释:

// 引入所有标准库
#include<bits/stdc++.h>
using namespace std;

// 定义一个二维数组v[7][7],用于标记6x6的方格是否被访问过,初始化为0
int v[7][7];

// 定义一个整数ans,用于记录分割方法的数量
int ans;

// 定义两个数组dx和dy,分别表示在x和y方向上的移动,用于搜索周围的格子
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};

// 定义一个辅助函数check,用于判断某个格子是否在6x6的范围内且未被访问过
bool check(int x,int y)
{
    if(x>=0&&x<=6&&y>=0&&y<=6&&v[x][y]==0) // 判断x和y是否在[0,6]范围内,并且v[x][y]为0
        return true; // 如果是,则返回true
    return false; // 否则返回false
}

// 定义一个递归函数dfs,用于深度优先搜索分割方格的所有可能情况
void dfs(int x,int y)
{
    if(x==0||x==6||y==0||y==6) // 如果当前格子位于边界上
    {
    	ans++; // 增加分割方法的数量
    	return ; // 直接返回,不再继续搜索
	}
    for(int i=0;i<4;i++) // 遍历四个方向
    {
    	int tox=x+dx[i]; // 计算下一个格子的x坐标
    	int toy=y+dy[i]; // 计算下一个格子的y坐标
    	if(check(tox,toy)) // 如果下一个格子在范围内且未被访问过
    	{
    		v[tox][toy]=1; // 标记当前格子为已访问
    		v[6-tox][6-toy]=1; // 由于分割后的两部分形状完全相同,所以同时标记对称位置的格子
    		dfs(tox,toy); // 递归调用dfs,继续搜索下一个格子
    		v[tox][toy]=0; // 回溯,取消当前格子的访问标记
    		v[6-tox][6-toy]=0; // 同时取消对称位置格子的访问标记
		}
	}
}

int main()
{
    v[3][3]=1; // 初始化方格,将中心点标记为已访问,这是题目给定的初始条件
	dfs(3,3); // 调用dfs函数,从(3,3)开始深度优先搜索
    cout<<ans/4; // 输出分割方法的数量,由于每4种旋转对称的分割方法视为一种,所以需要除以4
    return 0; // 程序结束
}

这段代码通过深度优先搜索(DFS)的方法,从给定的初始点(3,3)开始,探索所有可能的分割6x6方格的方法。每找到一个分割方法,就将ans加1。由于旋转对称的分割方法在这个问题中被视为相同的解,所以在最后输出结果时,需要将ans除以4来得到最终的不同分割方法的数量。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯基础练习汇总详细解析(三)——字母图形、01字符串、闰年判断(详细解题思路、代码实现、Python)

试题 基础练习 字母图形 提交此题 评测记录 资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 利用字母可以组成一些美丽的图形&#xff0c;下面给出了一个例子&#…

汇编语言学习记录 01

目录 VScode配置调试环境 Debug的主要命令 简单写个Hello World VScode配置调试环境 没有IDE真的蛮难受的 安装插件TASM/MASM 右键扩展设置&#xff0c;选择Assembler&#xff1a;MASM 右键调试即可开始 Debug的主要命令 R-查看和修改寄存器 D-查看内存单元 E-修改内…

SAP系统如何使用中间数据库与其它系统进行数据交互

SAP系统与外部系统之间进行数据交换和通信的接口方式有很多种,比如常用的接口技术有RFC、BAPI、ALE、Webservice、RESTful、中间数据库等等,不同的接口形式具有不同的特点和适用场景,可以根据具体需求选择合适的接口形式来实现系统间的数据交互。 前面文章中已介绍Webservi…

2024年腾讯云4核8G服务器多少钱一年?买1年送3个月

2024年腾讯云4核8G服务器租用优惠价格&#xff1a;轻量应用服务器4核8G12M带宽646元15个月&#xff0c;CVM云服务器S5实例优惠价格1437.24元买一年送3个月&#xff0c;腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图&#xff1a; 腾讯云4核8G服务器优惠价格 轻…

SOC子模块--Timer

作用 Timer 是片内集成的通用定时器&#xff0c;能够向系统提供定时中断&#xff0c;也可以通过外部时钟进行定时计数&#xff1b; 工作模式 重启计数模式&#xff1a; 当通道使能后计数器锁存加载计数寄存器的值&#xff0c;然后在系统时钟的驱动下递减计数。当计数到零时…

信息系统项目管理师——第9章项目范围管理(重要)

本章属于10大管理知识领域&#xff0c;选择、案例、论文都会考。选择题考大概3分&#xff0c;案例题考的比较多&#xff0c;需要重点记录&#xff0c;论文也考的比较多&#xff0c;建议作为第二梯队准备。 1.管理基础 1.1 产品范围和项目范围 产品范围:指某项产品、服务或成…

Yarn资源调度器

目录 写在前面一、yarn资源调度器1.1 Yarn基础架构1.2 Yarn工作机制1.3 作业提交全过程1.3.1 作业提交1.3.2 作业初始化1.3.3 任务分配1.3.4 任务运行1.3.5 进度和状态更新1.3.6 作业完成 1.4 Yarn调度器和调度算法1.4.1 先进先出调度器&#xff08;FIFO&#xff09;1.4.2 容量…

如何使用VS统计自己的代码量?

历经漫漫编程之路&#xff0c;此刻我们不妨回首细数&#xff0c;那已累积的无数行代码&#xff0c;它们如同一串串无声的脚印&#xff0c;记载着我们默默耕耘的点滴时光。每一行代码都是平凡努力的印记&#xff0c;见证了我们的执着与付出&#xff0c;也塑造了今天的我们。让这…

Pandas数据清洗

数据清洗是对一些没有用的数据进行处理的过程。很多数据集存在数据缺失、数据格式错误、数据错误或数据重复的情况&#xff0c;如果要使数据分析更加准确&#xff0c;就需要对这些没有用的数据进行处理。 这里使用的测试数据是clean-data.csv&#xff0c;如图3-10所示。这个表…

【二叉树】Leetcode 108. 将有序数组转换为二叉搜索树【简单】

将有序数组转换为二叉搜索树 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡二叉搜索树。 示例1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null…

npm淘宝镜像源更新

目录 前情提要&#xff1a; 背景&#xff1a; 镜像源更新&#xff1a; 清楚缓存&#xff1a; 直接切换镜像源&#xff1a; 补充&#xff1a; 错误解释&#xff1a; 解决方法&#xff1a; 前情提要&#xff1a; 2024 /1 /22 &#xff0c;registry.npm.taobao.org淘宝镜像源的SSL…

基于java实现的高校二手交易平台

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclip…

【uniapp】uniapp实现免密登录

文章目录 一、概要二、整体架构流程三、技术名词解释四 、技术细节1.存取token有效期&#xff1f;2.使用setStorageSync而不使用setStorage&#xff1f;3.使用onLaunch而不使用全局路由&#xff1f; 一、概要 打开一个网页或小程序的时候&#xff0c;我们有时候会自动进入主页…

【JAVA】多态

去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同 的状 态。 比如吃东西 猫吃的是猫粮&#xff0c;狗吃的是狗粮 多态实现条件 1. 必须在继承体系下 2. 子类必须要对父类中方法进行重写 3. 通过父类的引用调用重写的方法 多态体现&#xff1a;在代码运行时…

【Spring Boot 源码学习】共享 MetadataReaderFactory 上下文初始化器

《Spring Boot 源码学习系列》 共享 MetadataReaderFactory 上下文初始化器 一、引言二、往期内容三、主要内容3.1 源码初识3.2 CachingMetadataReaderFactoryPostProcessor3.2.1 register 方法3.2.1 configureConfigurationClassPostProcessor 方法 3.3 ConfigurationClassPos…

uniApp使用XR-Frame创建3D场景(4)金属度和粗糙度

上一篇讲解了如何在uniApp中创建xr-frame子组件并创建简单的3D场景。 这一篇我们讲解xr-frame中关于mesh网格材质的金属度和粗糙度的设置。 1.先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"> <xr-node visible"{…

面试知识汇总——JVM内存模型

JVM内存模型 线程独占&#xff1a;栈和本地方法栈、程序计数器&#xff1b;线程共享的是堆和方法区 栈&#xff1a;又叫方法栈&#xff0c;线程私有&#xff0c;线程执行方法都会创建一个栈阵&#xff0c;用来储存局部变量表&#xff0c;调用方法执行入栈&#xff0c;方法返回…

AJAX(二):axios 和 fetch函数发送AJAX请求、同源策略、 jsonp、CORS

一、各种发送AJAX请求 jquery基于回调函数&#xff0c;axios基于promise 1.axios发送AJAX请求!!! axios (v1.5.0) - Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 Node.js 中。 | BootCDN - Bootstrap 中文网开源项目免费 CDN 加速服务 服务器&#xff1a; app.…

Linux 系统 docker搭建LNMP环境

1、安装nginx docker pull nginx (默认安装的是最新版本) 2、运行nginx docker run --name nginx -p 80:80 -d nginx:latest 备注&#xff1a;--name nginx 表示容器名为 nginx -d 表示后台运行 -p 80:80 表示把本地80端口绑定到Nginx服务端的 80端口 nginx:lates…

c++|STL简介+string类的使用(常用接口)

目录 一、STL简介 1.1STL的版本 1.2STL六大组件 1.3STL的重要性及缺陷 二、string类简介 2.1string类了解 2.2为什么学习string类 三、string类使用(常用接口) 3.1string类的成员函数 3.1.1构造函数 3.1.2析构函数 3.1.3“”运算符重载函数 3.2迭代器(iterator)s…