蓝桥杯第八届真题 :方格分割

点击查看:蓝桥杯历年真题 题解目录
方格分割

在这里插入图片描述

标准评测答案: 509
解题方法分析:
1.递归+回溯 思路
2.  6*6的方格有7*7个点。以方格的中心点(33{左下角为(00}
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;
    }
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值