题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
6x6的方格,沿着格子的边线剪开成两部分。 要求这两部分的形状完全相同。
如下就是三种可行的分割法。
正在上传…重新上传取消
试计算: 包括这 33 种分法在内,一共有多少种不同的分割方法。 注意:旋转对称的属于同一种分割法。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
这道题第一眼真看不出来是个搜索题,我们不妨这样分析,不去看格子,而是看格子的线,是一个7*7的线,如果要形成对称,就一定要经过中心点(3,3) ,并且经过(x,y)时就一定要经过(6-x,6-y)这样才能对称,最后再除以4就是最终答案
#include <bits/stdc++.h>
using namespace std;
bool vis[7][7];
int X[4]={0,0,1,-1};
int Y[4]={1,-1,0,0};
int ans;
void dfs(int x,int y)
{
if(x==0||x==6||y==0||y==6)
{
ans++;
return;
}
for(int i=0;i<4;i++)
{
int nx=x+X[i];
int ny=y+Y[i];
if(!vis[nx][ny])
{
vis[nx][ny]=true;
vis[6-nx][6-ny]=true;
dfs(nx,ny);
vis[nx][ny]=false;
vis[6-nx][6-ny]=false;
}
}
}
int main()
{
vis[3][3]=true;//别忘了初始条件
dfs(3,3);
cout<<ans/4;
return 0;
}