6x6的方格,沿着格子的边线剪开成两部分。
要求这两部分的形状完全相同。
如图:p1.png, p2.png, p3.png 就是可行的分割法。
试计算:
包括这3种分法在内,一共有多少种不同的分割方法。
注意:旋转对称的属于同一种分割法。
要求这两部分的形状完全相同。
如图:p1.png, p2.png, p3.png 就是可行的分割法。
试计算:
包括这3种分法在内,一共有多少种不同的分割方法。
注意:旋转对称的属于同一种分割法。
dfs搜出来的,只能是一笔画 ,之前没有这样的概念,只是知道dfs,能搜出来一条路,
不知道有什么限制,这道题告诉我们搜索块是不行的,只能去搜索边,真的很神奇
#include <cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long ll;
const int maxn=10;
int vis[maxn][maxn];
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int ans=0;
void dfs(int x,int y){
if(x==1||x==7||y==1||y==7){
ans++;
return;
}
for(int i=0;i<4;i++){
int nx=x+dir[i][0],ny=y+dir[i][1];
if(!vis[nx][ny]&&nx>=1&&nx<=7&&ny>=1&&ny<=7){
vis[nx][ny]=vis[8-nx][8-ny]=1;
dfs(nx,ny);
vis[nx][ny]=vis[8-nx][8-ny]=0;
}
}
}
int main()
{
vis[4][4]=1;//好难受啊,妈的,这么简单,但是忘了标记,很上火
dfs(4,4);
printf("%d\n",ans/4);
return 0;
}