/* 标题:方格分割 6x6的方格,沿着格子的边线剪开成两部分。 要求这两部分的形状完全相同。 如图:p1.png, p2.png, p3.png 就是可行的分割法。 试计算: 包括这3种分法在内,一共有多少种不同的分割方法。 注意:旋转对称的属于同一种分割法。 请提交该整数,不要填写任何多余的内容或说明文字。 。*/ package test; public class 方格分割 { static int[][] book=new int[10][10]; static int[][] dire=new int[][]{{-1,0},{1,0},{0,-1},{0,1}}; static int N=6; static int ans; static void dfs(int x,int y) { if(x==0||y==N||x==N||y==0){ //当走到方格边处,且符合条件的 ans++;return; } for(int i=0;i<4;i++) //每个方格有上下左右方向 { int nx=x+dire[i][0]; int ny=y+dire[i][1]; if(nx<0||nx>N||y<0||ny>N)continue; if(book[nx][ny]==0) //该格未被标记过 { book[nx][ny]=1; //标记该方格,并标记对称方格 book[N-nx][N-ny]=1; dfs(nx,ny); book[nx][ny]=0; book[N-nx][N-ny]=0; //回溯 } } } public static void main(String arg[]) { book[N/2][N/2]=1;//基于对称则在方格中心位置必然是对称的 dfs(N/2,N/2); System.out.print(ans/4); //旋转2对称2,2*2 } }