6x6的方格,沿着格子的边线剪开成两部分。
要求这两部分的形状完全相同。
如图:p1.png, 就是可行的分割法。
试计算:
包括这3种分法在内,一共有多少种不同的分割方法。
注意:旋转对称的属于同一种分割法。
请提交该整数,不要填写任何多余的内容或说明文字。
由于需要的方式全都是中心对称,所以一定会经过(3,3)点,那么不妨从这给点开始DFS,得出来的结果因为是中心对称的,所以要除以四才得出正确结果。答案509
#include<bits/stdc++.h>
using namespace std;
int ans=0;
int dire[4][2]={
{0,1},//0上,0x,1y
{1,0},//1右
{0,-1},//下
{-1,0}//左
};
bool vis[7][7];
void dfs(int x,int y){
if(x<=0||x>=6||y<=0||y>=6){
ans++;
return;
}
int i;
vis[x][y]=1;
vis[6-x][6-y]=1;//中心对称取值
for(i=0; i<4; i++){
int nx = x + dire[i][0];
int ny = y + dire[i][1];
if(nx<0||nx>6||ny<0||ny>6)continue;
if(!vis[nx][ny]){
dfs(nx,ny);
}
}
vis[x][y]=0;
vis[6-x][6-y]=0;
}
int main(){
dfs(3,3);
printf("%d",ans/4);
return 0;
}