方格分割
标准评测答案: 509
解题方法分析:
1.递归+回溯 思路
2. 6*6的方格有7*7个点。以方格的中心点(3,3){左下角为(0,0)}
3.增加辅助数组,用来记录走过的点,走过的点与点之间的线为切割线
4.初始从中心点出发,两个指针分别向两个相对的方向移动,
即:(x,y)上下左右移,(6-x,6-y)下上右左移动,利用数组vir辅助移动
5.走过的点在辅助数组t中记为1,递归后进行回溯
6.如果点的位置到达边界,即 x,y=0或x,y=6 即完成一种情况 count++;
7. 因为旋转 对称后视为一种情况,所以结果 count/4;
package java_A_2017;
public class Main004_方格分割 {
static int[][]t = new int[7][7];
static int count = 0;
static int vir [][] = {{1,0},{-1,0},{0,1},{0,-1}};
public static void main(String[] args) {
dfs(3,3);
System.out.println(count/4);
}
private static void dfs(int x, int y) {
if(x==0 || x==6 || y==0 || y==6) {
count++;
return ;
}
t[x][y] = 1;
t[6-x][6-y] = 1;
for(int i=0;i<4;i++) {
int nx = x+vir[i][0];
int ny = y+vir[i][1];
if(t[nx][ny]==0) dfs(nx, ny);
}
t[x][y] = 0;
t[6-x][6-y] = 0;
}
}