您的位置:首页 > 其它

蓝桥杯A组省赛-方格分割

2018-03-28 16:59 337 查看
原文:
标题:方格分割

6x6的方格,沿着格子的边线剪开成两部分。要求这两部分的形状完全相同。如图:p1.png, p2.png, p3.png 就是可行的分割法。

试计算:
包括这3种分法在内,一共有多少种不同的分割方法。

注意:旋转对称的属于同一种分割法。
请提交该整数,不要填写任何多余的内容或说明文字。







试题分析:
将表格看作是以左下角为原点的坐标系,则不管怎么旋转,(3,3)总是在两个图像上,可以把题目看作是找一条从(3,3)到边界的线,不同的是,因为两个图形是对应的,所以每移动一格的距离会确定两条边。
AC代码:#include<iostream>
#include<cstring>
using namespace std;
const int n=6;
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int vis[n+1][n+1];
int c=0;

void dfs(int x,int y)
{
int i;

if(x==0||x==n||y==0||y==n)
{
c++;
return ;
}

for(i=0;i<4;i++)
{
int tx=x+dir[i][0];
int ty=y+dir[i][1];

if(vis[tx][ty])
continue;

vis[tx][ty]=1;
vis[n-tx][n-ty]=1;

dfs(tx,ty);

vis[tx][ty]=0;
vis[n-tx][n-ty]=0;

}
}

int main()
{
memset(vis,0,sizeof(vis));

vis[n/2][n/2]=1;
dfs(n/2,n/2);

cout<<c/4;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: