目录
- 🍋题目描述
- 🍋解题思路
- 🍋源代码
- 🍋其他真题
🍋题目描述
6x6的方格,沿着格子的边线剪开成两部分。
要求这两部分的形状完全相同。
如图:p1.png, p2.png, p3.png 就是可行的分割法。
试计算:
包括这3种分法在内,一共有多少种不同的分割方法。
注意:旋转对称的属于同一种分割法。
请提交该整数,不要填写任何多余的内容或说明文字。
🍋解题思路
我们看到这道题,首先以为是在格子里面做标记来做题。实际上这样很麻烦。我们应当是线段交点标记来做题。
以最中间的交点(3,3)为基点进行移动。有两个指针,两指针行走的方向必相反。最终把格子分成对称的两块。
看到有题目提示“注意:旋转对称的属于同一种分割法。”。那么,最终答案应该要除于4。因为一个图形,旋转4个90度,都是一样的。
- 答案:509
🍋源代码
public class Main {
static int ans;//答案变量
static int[][] dire={ {-1,0},{1,0},{0,-1},{0,1} };//四个方向
static int[][] vis=new int[7][7];//0~6
static void dfs(int x,int y) {
if(x==0||y==0||x==6||y==6) {//满足条件的,就ans++
ans++;
return;
}
//当前的点标注为已访问
vis[x][y]=1;
//对称点也标注为已访问
vis[6-x][6-y]=1;
for(int k=0;k<4;k++) {
int nx=x+dire[k][0];
int ny=y+dire[k][1];
//新坐标
if((nx < 0)|| nx> 6||ny<0||ny>6) continue;
if(vis[nx][ny]==0) {
dfs(nx,ny);
}
}
//回溯
vis[x][y]=0;
vis[6-x][6-y]=0;
}
public static void main(String[] args) {
dfs(3,3);
System.out.println(ans/4);
}
}