方格分割(蓝桥杯)

文章介绍了如何用C++的DFS解决6x6方格的分割问题,关注中心对称性,通过递归遍历并计数分割方案,排除旋转对称性的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方格分割

题目描述

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

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和d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

命运从未公平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值