6x6的方格,沿着格子的边线剪开成两部分。
要求这两部分的形状完全相同。
如图:p1.png, p2.png, p3.png 就是可行的分割法。
试计算:
包括这3种分法在内,一共有多少种不同的分割方法。
注意:旋转对称的属于同一种分割法。
public class Main {
static boolean[][] map = new boolean[7][7];
static int[][] dr = { { 0, 1 }, { 0, -1 }, { -1, 0 }, { 1, 0 } };
static int ans;
public static void main(String[] args) {
map[3][3] = true;
dfs(3, 3);
System.out.println(ans >> 2);
}
static void dfs(int x, int y) {
if (x == 0 || x == 6 || y == 0 || y == 6)
ans++;
else {
for (int i = 0; i < 4; i++) {
int nx = x + dr[i][0];
int ny = y + dr[i][1];
if (check(nx, ny)) {
map[nx][ny] = true;
map[6 - nx][6 - ny] = true;
dfs(nx, ny);
map[nx][ny] = false;
map[6 - nx][6 - ny] = false;
}
}
}
}
static boolean check(int nx, int ny) {
return nx >= 0 && nx <= 6 && ny >= 0 && ny <= 6 && !map[nx][ny];
}
}