思路:
1、从中心点(注意不是中心方块)出发,进行深度优先搜索
2、一次深度搜索以到达边界为退出条件,每次到达边界都是一种分割曲线的形成
3、因为左右上下对称的性质,结果需要除以4
难点主要是要想到:
1、对分割线经过的点进行遍历,而不是对组成的方块进行遍历
2、要以中心为出发点进行遍历
3、要把结果除以4
#include <cstdio>
#include <iostream>
#include <string.h>
#include <iostream>
using namespace std;
int ans = 0;
int sign[10][10];
int xd[4] = {0,1,0,-1};
int yd[4] = {1,0,-1,0};
void dfs(int a,int b){
//如果已经到达边界,答案加一
if(a==0||a==6||b==0||b==6){
ans += 1;
return;
}
//如果还没有达到边界,深搜四种情况
int i;
for(i=0;i<4;i++){
int nx = a+xd[i];
int ny = b+yd[i];
if(nx>=0&&nx<=6&&ny>=0&&ny<=6&&sign[nx][ny]==0){
//标记
sign[nx][ny] = 1;
sign[6-nx][6-ny] = 1;
dfs(nx,ny);
sign[nx][ny] = 0;
sign[6-nx][6-ny] = 0;
}
}
}
int main(){
memset(sign,0,sizeof(int)*10*10);
sign[3][3] = 1;
dfs(3,3);
cout<<ans/4<<endl;
return 0;
}