题目描述
题目描述
6x6的方格,沿着格子的边线剪开成两部分。要求这两部分的形状完全相同。如图就是可行的分割法。
试计算:包括这3种分法在内,一共有多少种不同的分割方法。注意:旋转对称的属于同一种分割法。
解题思路
题目不难,重点是要想到,所有的裁剪方法都必然经过中心点,则只需在中心点(3,3)进行DFS即可,最后一点要注意的是,旋转对称的属于同一种解法,中心对称有四种,则只需将最后的答案除以4即可
代码如下
#include<bits/stdc++.h>
using namespace std;
int x[4] = {0,0,1,-1};
int y[4] = {1,-1,0,0};
int ans;
int vis[10][10];
void dfs(int m,int n)
{
if( m==0 || n==0 || m==6 || n==6){
ans++;
return;
}
for(int i=0;i<4;i++)
{
int xx=m+x[i];
int yy=n+y[i];
if(vis[xx][yy]==0)
{
vis[xx][yy]=1;
vis[6-xx][6-yy]=1;
dfs(xx,yy);
vis[xx][yy]=0;
vis[6-xx][6-yy]=0;
}
}
}
int main()
{
vis[3][3]=1;
dfs(3,3);
cout<<ans/4<<endl;
return 0;
}