题目
题目描述:
6x6的方格,沿着格子的边线剪开成两部分。要求这两部分的形状完全相同。
如图:就是可行的分割法。
试计算:包括这3种分法在内,一共有多少种不同的分割方法。注意:旋转对称的属于同一种分割法。
请提交该整数,不要填写任何多余的内容或说明文字。
输入:
无
输出:
请提交该整数,不要填写任何多余的内容或说明文字。
样例输入
无
样例输出
无
思路
这是一题搜索题。主要求的就是由中点(3,3)到顶点的走法有多少种
可以看出来这是个正方形是中心对称图形,因此它到四个顶点时中心对称的。最后结果要除以4.
由DFS解出答案
代码
public class Main {
static int count;
static boolean book[][] = new boolean[10][10]; //判断数组
public static void main(String[] args) {
count=0;
for(int i=0;i<10;i++) {
for(int j=0;j<10;j++) {
book[i][j]=false;
}
}
book[3][3]=true;
dfs(3,3);
System.out.println(count/4);
}
private static void dfs(int x,int y) {
int[][] next= {{0,1},{0,-1},{1,0},{-1,0}}; //扩展的方向
int tx,ty;
if(x==0||y==0||x==6||y==6) { //到达边界
count++;
return;
}
for(int i=0;i<4;i++) {
tx=x+next[i][0];
ty=y+next[i][1];
if(book[tx][ty])
continue;
book[tx][ty]=true;
book[6-tx][6-ty]=true;
dfs(tx,ty);
book[tx][ty]=false; //深搜回退后要重置
book[6-tx][6-ty]=false;
} }}