标题:方格分割
6x6的方格,沿着格子的边线剪开成两部分。
要求这两部分的形状完全相同。
如图:p1.png, p2.png, p3.png 就是可行的分割法。
试计算:
包括这3种分法在内,一共有多少种不同的分割方法。
注意:旋转对称的属于同一种分割法。
请提交该整数,不要填写任何多余的内容或说明文字。
回忆满满=-=。这是大一第一次参加蓝桥杯B组的题。当时没有写出来。现在再看这道题。。发现是一道很简单的题目。
题解:要求这个6*6的方格被分成两部分,这两部分必须相同。观察一下三张图片。很明显是关于(3,3)对称的。从这个点开始向两个相反的方向搜索。搜到边缘,就讲结果加一。因为旋转不算。所以结果要除以四。思路简单,代码更简单。
#include<iostream>
using namespace std;
int next[4][2] = {1,0,-1,0,0,-1,0,1};
int ans = 0;
int vis[10][10];
void dfs(int x,int y){
if(x == 0 || y == 0 || x == 6 || y == 6){
ans ++ ;
return ;
}
for(int i = 0 ; i < 4 ; i ++){
int nx = x + next[i][0];
int ny = y + next[i][1];
if(nx >= 0 && ny >= 0 && nx <= 6 && ny <= 6){
if(!vis[nx][ny]){
vis[nx][ny] = 1;
vis[6-nx][6-ny] = 1;
dfs(nx,ny);
vis[nx][ny] = 0;
vis[6-nx][6-ny] = 0;
}
}
}
}
int main(){
vis[3][3] = 1;
dfs(3,3);
cout << ans / 4 << endl;
}