题目:方格分割
标题:方格分割6x6的方格,沿着格子的边线剪开成两部分。要求这两部分的形状完全相同。
试计算:包括这3种分法在内,一共有多少种不同的分割方法。
如图:p1.png, p2.png, p3.png 就是可行的分割法。
注意:旋转对称的属于同一种分割法。
请提交该整数,不要填写任何多余的内容或说明文字。
解题分析:
1.关键在于怎么剪裁,我的方法是从中心点开始,dfs到达边界的可能性
2.易错点:a.对称剪裁,所以每一次移动要标记两个点 b.最后的结果 要除4
代码:
#include<iostream>
#define maxn 10
//#define N 6
int N=6;
using namespace std;
int out[maxn][maxn]={0},num=0;
int turn[4][2]={-1,0,1,0,0,-1,0,1};
void dfs(int x,int y)
{
if(x==0||x==6||y==0||y==6)
{
num++;
return;
}
else
{
for(int i=0;i<4;i++)
{
int tx=x+turn[i][0];
int ty=y+turn[i][1];
if(out[tx][ty]) continue;
out[tx][ty]=out[N-tx][N-ty]=1;
dfs(tx,ty);
out[tx][ty]=out[N-tx][N-ty]=0;
}
}
}
int main()
{
out[N/2][N/2]=1;
dfs(3,3);
cout<<num/4;
return 0;
}
正确结果为:509