第七届蓝桥杯JavaB组——第7题剪邮票

题目:
剪邮票

如【图1.jpg】, 有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。

请你计算,一共有多少种不同的剪取方法。

请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

解题思路:

//首先从12数中选出5个数 用深搜(保证五个数是递增的,避免重复) 将五个数转化为坐标形式

// 再判断这5个数是否相连,用广搜

/**
 * @author LZP
 * @date 2021年2月27日
 * @Description
 * @version 1.0
 */
public class Main {
    
    private static int count;
    
    /**
     * 辅助数组
     * 作用:将原本代表十二生肖的1~12个数字改为0~11,这样便于后面判断两个数是否在同一行或同一列
     */
    private static int[] dp = new int[12];
    
    /**
     * 存放剪下来的5个数
     */
    private static int[] arr = new int[5];
    
    public static void main(String[] args) {
	division(1, 0);
	System.out.println(count);
    }
    
    public static void division(int pos, int curIndex) {
	if (pos > 5) {
	    // 此时已经剪好了5个生肖(即5个数),可以开始判断这5个生肖剪下来是否是连续的
	    // 这里定义一个boolean数组,如果5个值都是true,那么则表示这5个生肖剪下来是连续的
	    boolean[] visits = new boolean[5];
	    isContinue(visits, 0);
	    if (visits[0] && visits[1] && visits[2] && visits[3] && visits[4]) {
		count++;
	    }
	    return;
	}
	for (int i = curIndex; i < dp.length; i++) {
	    arr[pos - 1] = i;
	    /*
	     * 这里要注意的是:
	     * 下一个递归的数是从i + 1开始,而不是curIndex + 1开始,因为要一直从后连续的找,
	     * 所以必须是 当前数的下一个数作为基准开始
	     */
	    division(pos + 1, i + 1); 
	}
    }

    public static void isContinue(boolean[] visits, int index) {
	// 此时访问了下标为index的数
	visits[index] = true;
	
	// 依次遍历visits数组,如果发现对应下标的值是false,那么表示该数还没有被访问
	for (int i = 0; i < visits.length; i++) {
	    // 先判断此时下标i这个数是否已经被访问,若已被访问,则不做任何事情,反之则继续进行后续判断
	    // 判断是否在同一行其相邻
	    if (!visits[i] && (arr[i] / 4 == arr[index] / 4) && (arr[i] + 1 == arr[index] || arr[i] - 1 == arr[index])) {
		// 递归
		// 把下标为i的这个数作为开始,让它再去依次遍历visits数组,看有没有和它相邻的,如果有,就继续重复这个步骤下去
		isContinue(visits, i);
	    }
	    
	    // 判断是否在同一列且在邻行
	    if (!visits[i] && (arr[i] - 4 == arr[index] || arr[i] + 4 == arr[index])) {
		// 递归
		// 把下标为i的这个数作为开始,让它再去依次遍历visits数组,看有没有和它相邻的,如果有,就继续重复这个步骤下去
		isContinue(visits, i);
	    }
	}
    }
}

答案:
116

posted @ 2021-02-27 15:33  没有你哪有我  阅读(135)  评论(0编辑  收藏  举报