方格分割(蓝桥杯)

文章目录

  • 方格分割
    • 题目描述
    • 答案: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]为0return true; // 如果是,则返回truereturn 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种旋转对称的分割方法视为一种,所以需要除以4return 0; // 程序结束
}

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

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

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

相关文章

[Linux_IMX6ULL驱动开发]-基础驱动

驱动的含义 如何理解嵌入式的驱动呢&#xff0c;我个人认为&#xff0c;驱动就是嵌入式上层应用操控底层硬件的桥梁。因为上层应用是在用户态&#xff0c;是无法直接操控底层的硬件的。我们需要利用系统调用&#xff08;open、read、write等&#xff09;&#xff0c;进入内核态…

2000-2022年全国31省年末常住人口数据(无缺失)

2000-2022年全国31省年末常住人口数据&#xff08;无缺失&#xff09; 1、时间&#xff1a;2000-2022年 2、指标&#xff1a;年末常住人口 3、来源&#xff1a;整理自国家统计J和各省NJ 4、范围&#xff1a;31省市 5、缺失情况&#xff1a;无缺失 6、指标解释&#xff1a…

智能小程序有哪些重要能力?

概念 小程序能力是模块化的&#xff0c;它以kit的形式提供给业务&#xff08;开发者&#xff09;。通过kit可以实现快速接入涂鸦生态&#xff0c;获得互联互通的能力。 能力分包 能力分类包名基础能力BaseKit小程序容器能力MiniKit涂鸦内部基础能力以及细粒度通用业务能力Biz…

RabbitMQ(简单模式)

2种远程服务调用 1openFeign&#xff1a; 优点&#xff1a;能拿到被调用的微服务返回的数据&#xff0c;系统系耦度高&#xff0c;系统稳定。 缺点&#xff1a;同步调用&#xff0c;如果有很多服务需要被调用&#xff0c;耗时长。 MQ,消息队列&#xff0c;RabbitMQ是消息we…

Spring Boot项目启动过程中为什么日志打印没有显示完整包名呢?

一、前言 不知道大家注意过没有&#xff0c;在Spring Boot项目启动过程中日志打印并没有显示完整的报名&#xff0c;而是显示一些o.a.c&#xff0c;o.s.web形式的包名&#xff0c;如下图&#xff1a; 这是为什么呢&#xff1f; 二、原理 首先&#xff0c;我们先看一下Spring…

【b站李炎恢】Vue.js Element UI | 十天技能课堂 | 更新中... | 李炎恢

课程地址&#xff1a;【Vue.js Element UI | 十天技能课堂 | 更新中... | 李炎恢】 https://www.bilibili.com/video/BV1U54y127GB/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 备注&#xff1a;虽然标题声明还在更新中&#xff0c;但是看一些常用…

算法打卡day19

今日任务&#xff1a; 1&#xff09;235. 二叉搜索树的最近公共祖先 2&#xff09;701.二叉搜索树中的插入操作 3&#xff09;450.删除二叉搜索树中的节点 235. 二叉搜索树的最近公共祖先 题目链接&#xff1a;235. 二叉搜索树的最近公共祖先 - 力扣&#xff08;LeetCode&…

45.跳跃游戏||

// 定义一个名为Solution的类 class Solution {// 定义一个public方法jump&#xff0c;输入参数为一个整数数组nums&#xff0c;返回值类型为整数public int jump(int[] nums) {// 初始化跳跃次数结果变量为0int result 0;// 初始化当前覆盖的最远距离下标为0int end 0;// 初…

【C语言】Infiniband驱动init_dev_assign函数

一、注释 一个内核模块的初始化函数&#xff0c;用于分配和初始化某些资源。以下是对代码块的逐行中文注释&#xff1a; // 定义一个初始化设备分配的函数 static void init_dev_assign(void) {int i 1;spin_lock_init(&dev_num_str_lock); // 初始化自旋锁if (mlx4_fil…

【MySQL】5.2MySQL高级语句与sql语句

模板 test、class、class0 mysql> select * from test; -------------------------------- | idcard | name | age | hobbid | -------------------------------- | 01 | lizi | 18 | guangjie | | 02 | monor | 22 | zhaijia | | 03 | sansan | …

前端-html-02

1.列表 标签名功能和语义属性单标签还是双标签ul无序列表包裹元素双标签 ol 有序列表包裹元素双标签li列表项双标签dl定义列表包裹元素双标签dt定义列表项标题双标签dd定义列表项描述双标签 li必须由Ul或者ol包裹 <!DOCTYPE html> <html><head><…

学透Spring Boot — 创建一个简单Web应用

从今天开始&#xff0c;我们将开始学习一个新的系列&#xff0c;那就是在项目中用得非常广泛的一个框架 —— Spring Boot&#xff0c;我们会循序渐进地介绍 Spring Boot 的方方面面&#xff0c;包括理论和实战&#xff0c;也会介绍和Spring Boot一些热点面试题。 概论 本文是…