传送门
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
6x6的方格,沿着格子的边线剪开成两部分。 要求这两部分的形状完全相同。
如下就是三种可行的分割法。
试计算: 包括这 33 种分法在内,一共有多少种不同的分割方法。 注意:旋转对称的属于同一种分割法。
分析:不能按格子遍历,无法找到对称点,必须按格子四周的点遍历,这样也可以控制图案,以(3,3)为初始点,所以开始必须提前标记为1。
大概思路就是走一步标记该点以及和它对称的点。
AC代码:
#include<bits/stdc++.h>
using namespace std;
int nex[4][2]={0,1,0,-1,1,0,-1,0},vis[10][10];
int ans=0;
void dfs(int x,int y)
{
int xx,yy;
if(x==0||y==0||x==6||y==6)
{
ans++;
return;
}
for(int i=0;i<4;i++)
{
xx=x+nex[i][0];
yy=y+nex[i][1];
if(xx>=0&&yy>=0&&xx<=6&&yy<=6&&!vis[xx][yy]&&!vis[6-xx][6-yy])
{
vis[xx][yy]=vis[6-xx][6-yy]=1;
dfs(xx,yy);
vis[xx][yy]=vis[6-xx][6-yy]=0;
}
}
}
int main()
{
vis[3][3]=1;//从中心点开始,遍历前一定要记得标记为走过
dfs(3,3);
printf("%d\n",ans/4);//存在四个方位的旋转对称,图形都一样,所以记得/4;
}