题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
6x6的方格,沿着格子的边线剪开成两部分。 要求这两部分的形状完全相同。
如下就是三种可行的分割法。
试计算: 包括这 33 种分法在内,一共有多少种不同的分割方法。 注意:旋转对称的属于同一种分割法。
典型的DFS:主要思路是从中间坐标(3,3)开始走,设其当前坐标为(x,y),则其对称的坐标为(6-x,6-y),并用vis记录已走,然后改变四个方向的坐标,对其进行dfs(),如果符合条件则ans加一,最后因为旋转对称是同一种分法,从(3,3)开始有四个方向,所以最后要ans/4。代码如下:
import java.util.*;
public class Main{
public static boolean [][]vis=new boolean [7][7];//记录是否走过
public static int [][]dir= {{-1,0},{1,0},{0,-1},{0,1}};//代表四个不同的方向
public static int ans;
public static void dfs(int x,int y) {
if(x==0||y==0||x==6||y==6) {
ans++;
return;
}
vis[x][y]=true;//对走过的记录
vis[6-x][6-y]=true;
for(int i=0;i<4;i++) {//向四个不同方向走
int nx=x+dir[i][0];
int ny=y+dir[i][1];
if(nx<0||ny<0||nx>6||ny>6)
continue;
if(!vis[nx][ny])
dfs(nx,ny);
}
vis[x][y]=false;
vis[6-x][6-y]=false;
}
public static void main(String[] args) {
ans=0;
dfs(3,3);
System.out.println(ans/4);
}
}