DFS-格子分割
格子分割
描述:6x6的方格,沿着格子的边线剪开成两部分。 要求这两部分的形状完全相同。问有多少种方法(旋转的方法算同一种)
关键词:dfs深搜,对称图形,分割
思路:根据分割线的对称性,所以从中心点开始回溯+深搜,并且双向标记
class One{
int N=6;
public void teet(){
// 初始化
int vis[][]=new int[N+1][N+1];
vis[3][3]=1;
dfs(3,3,vis);
System.out.println(ans/4);
}
int ans=0;
int [][]dir={{0,1},{0,-1},{-1,0},{1,0}};
public void dfs(int x,int y,int [][]vis){
if(x==0||y==0||x==N||y==N){
ans++;
return;
}
for(int i=0;i<4;i++){
if(vis[x+dir[i][0]][y+dir[i][1]]==0){
vis[x+dir[i][0]][y+dir[i][1]]=1;
vis[N-(x+dir[i][0])][N-(y+dir[i][1])]=1;
dfs(x+dir[i][0],y+dir[i][1],vis);
vis[x+dir[i][0]][y+dir[i][1]]=0;
vis[N-(x+dir[i][0])][N-(y+dir[i][1])]=0;
}
}
}
}