题目描述
给定一个 6×6 的方格,沿着格子的边线剪开成两部分。 要求这两部分的形状完全相同。
如下就是三种可行的分割法。
试计算: 包括这 3 种分法在内,一共有多少种不同的分割方法。 注意:旋转对称的属于同一种分割法。
import java.util.*;
public class mian1 {
static int visit[] []=new int[7][7];//有没有走过这个点
static int ans=0;//答案
static int dir[][]=new int[][] {{-1,0},{1,0},{0,-1},{0,1}};//方向
static void dfs(int x,int y) {
//退出条件,得到一种方案
if(x==0||x==6||y==0||y==6) {
ans++;
return;
}
//记录走过的路
visit[x][y]=1;
visit[6-x][6-y]=1;//对称点
//四个方向走
for (int i = 0; i < 4; i++) {
int nx=x+dir[i][0];
int ny=y+dir[i][1];
if(nx>-1&&nx<7&&ny>-1&&ny<7&&visit[nx][ny]==0) {
dfs(nx,ny);
}
}
//回溯
visit[x][y]=0;
visit[6-x][6-y]=0;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
dfs(3,3);//3行3列开始走
}
}