题目描述
6 x 6 的方格,沿着格子的边线剪开成两部分。
要求这两部分的形状完全相同。
如图就是可行的分割法。
试计算:包括这 3 种分法在内,一共有多少种不同的分割方法。
注意:旋转对称的属于同一种分割法。
答案提交
请提交该整数,不要填写任何多余的内容或说明文字。
答案:509
题解
DFS:
解题思路
:
6 × 6
的格子有7 × 7
个格点;- 从中心点
[3, 3]
开始搜索,同时标记搜索点和对称点; - 当搜到边界的时候,就完成了一次分割;
- 由于旋转对称属于同一种分割法,因此
ans / 4
;
#include <iostream>
using namespace std;
const int N = 10;
int ans;
bool used[N][N];
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
void dfs(int x, int y)
{
if(!x || x == 6 || !y || y == 6)
{
ans ++;
return;
}
for (int i = 0; i < 4; i ++)
{
int a = x + dx[i], b = y + dy[i];
if(used[a][b]) continue;
used[a][b] = true;
used[6 - a][6 - b] = true;
dfs(a, b);
used[a][b] = false;
used[6 - a][6 - b] = false;
}
}
int main()
{
used[3][3] = true;
dfs(3, 3);
cout << ans / 4 << endl;
return 0;
}