方格分割
6x6的方格,沿着格子的边线剪开成两部分。
要求这两部分的形状完全相同。
试计算:
包括这3种分法在内,一共有多少种不同的分割方法。
注意:旋转对称的属于同一种分割法。
请提交该整数,不要填写任何多余的内容或说明文字。
思路:这道题很巧妙,不按照格子搜索,搜索点,从中心点开始深搜,同时标记对称的点,当一边搜完时就是一个可行的方案。最后记得/4.
#include <iostream>
using namespace std;
bool big[10][10];
int ans = 0 ;
void dfs(int x,int y )
{
if(x == 0 ||y ==0||x==6||y == 6)
{
ans ++;
return ;
}
big[x][y] = big[6-x][6-y] = true;
if(y <6 )if(!big[x][y +1]) dfs( x,y +1);
if(y >0 )if(!big[x][y -1]) dfs( x,y -1);
if(x <6 )if(!big[x +1][y]) dfs( x +1,y);
if(x >0 )if(!big[x -1][y]) dfs( x -1,y);
big[x][y] = big[6-x][6-y] = false;
}
int main()
{
dfs(3,3);
cout<<ans/4;
}