方格分割
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
6x6的方格,沿着格子的边线剪开成两部分。 要求这两部分的形状完全相同。
如下就是三种可行的分割法。
答案:509
思路
首先,从题目入手,一个方格纸分割成两个相同的部分,首先可以想到剪“格子”,但是剪“格子”这种方法不好判断连通的问题,所以应该换一个思路,换成找切割线,由于是两个相同的部分,所以切割线是关于中心点中心对称的,由线再化到点上去,就转化成了遍历点的思路, 我们可以利用深搜(DFS)来遍历寻找切割方法的总数;
-
截至条件为切割到纸的边界处也就是:
(x==0||y==0||x==6||y==6)
-
设置记忆数组将每次遍历的点做标记,便于判断是否遍历过
注意:题目中说旋转,对称算作一种图形,图案关于中心点中心对称的所以应该除以4
dfs
这段代码是一个C++程序,用于解决一个方格分割问题。下面是对代码的详细注释:
// 引入所有标准库
#include<bits/stdc++.h>
using namespace std;
// 定义一个二维数组v[7][7],用于标记6x6的方格是否被访问过,初始化为0
int v[7][7];
// 定义一个整数ans,用于记录分割方法的数量
int ans;
// 定义两个数组dx和d