题目:方格分割
标题:方格分割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