方格分割

来源:互联网 发布:酒店水牌通过网络发送 编辑:程序博客网 时间:2024/05/09 01:41

6x6的方格,沿着格子的边线剪开成两部分。
要求这两部分的形状完全相同。

如图:p1.png, p2.png, p3.png 就是可行的分割法。

试计算:
包括这3种分法在内,一共有多少种不同的分割方法。
注意:旋转对称的属于同一种分割法。

请提交该整数,不要填写任何多余的内容或说明文字。

这里写图片描述
这里写图片描述
这里写图片描述
唉,当时没有做出来,用深搜也没有跑出来,后来看了网上一些思路,自己写了一下。

#include<bits/stdc++.h>using namespace std;int cx[4]={0,0,1,-1},cy[4]={1,-1,0,0},a[7][7],s;void dfs(int x,int y){    if(x==0||y==0||x==6||y==6)      {        s++;return;      }      for(int i=0;i<4;i++)      {        int xx=x+cx[i],yy=y+cy[i];              if(xx>=0&&xx<=6&&yy>=0&&yy<=6&&a[xx][yy]==0&&a[6-xx][6-yy]==0)                      a[xx][yy]=1,a[6-xx][6-yy]=1,dfs(xx,yy),a[xx][yy]=0,a[6-xx][6-yy]=0;      }}int main(){    a[3][3]=1;    dfs(3,3);    cout<<s/4<<endl;}

这篇博客不错:http://www.cnblogs.com/kearon/p/6683512.html