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

请你计算,一共有多少种不同的剪取方法。
问题分析
按题目,从1开始计数的话:
|-同行:(id-1)÷4的结果相等,左右邻:相减±1
|-同列:%4的结果相等,上下邻:相减±4
使用深度优先遍历,
深度优先:推进到底,触底再回
比如:{3,5,6,7,10}

先查找3跟{3,5,6,7,10}的谁相邻:
3-X
5-X
6-X
7-OK
10-等待
3-7匹配上了,继续推进,比较7和谁相邻(3已经比过了,算不匹配):
3-X
5-X
6-OK
7-等待
10-等待
7-6匹配上了,继续推进,比较6和谁相邻:
3-X
5-OK
6-等待
7-等待
10-等待
虽然6和10页相邻,但是”深度优先”,先推进下去,不管10。
5没有再相邻的,所以回到6,再匹配到10。
深度递归:
|-先推进到底,走不通了再回头
|-只要每个点都能走到,说明是连着的

package bb;
import java.util.HashSet;
import java.util.Set;
public class 剪邮票 {
private static boolean check(int a[]) {
boolean flag[] = new boolean[5];
dfs(a, flag, 0);
return flag[0] && flag[1] && flag[2] && flag[3] && flag[4];
}
// 深度优先搜索
private static void dfs(int a[], boolean[] flag, int n) {
flag[n] = true;
for (int i = 0; i < 5; i++) {
// 同行:(id-1)÷4的结果相等,左右邻:加减为1
// 不能用÷5,一行就4个(9÷5==1,10÷5==2)
if (!flag[i] && ((a[i] - 1) / 4 == (a[n] - 1) / 4)
&& (a[i] == a[n] - 1 || a[i] == a[n] + 1)) {
dfs(a, flag, i);
}
// 同列:%4的结果相等,上下邻:加减为4
if (!flag[i] && (a[i] % 4 == a[n] % 4) && (a[i] == a[n] - 4 || a[i] == a[n] + 4)) {
dfs(a, flag, i);
}
}
}
static Set<String> cutStamps() {
int[] a = new int[5];
Set<String> _set = new HashSet<String>();
int START = 0 + 1;
int END = 12 + 1;
for (a[0] = START; a[0] < END; ++a[0]) {
for (a[1] = a[0] + 1; a[1] < END; ++a[1]) {
for (a[2] = a[1] + 1; a[2] < END; ++a[2]) {
for (a[3] = a[2] + 1; a[3] < END; ++a[3]) {
for (a[4] = a[3] + 1; a[4] < END; ++a[4]) {
if (check(a)) {
_set.add("" + a[0] + " " + a[1] + " " + a[2] + " " + a[3] + " "
+ a[4]);
}
}
}
}
}
}
return _set;
}
public static void main(String[] args) {
Set<String> _set1 = cutStamps();
System.out.println(_set1.size());
System.out.println(_set1.contains("2 6 7 11 12"));
System.out.println(_set1.contains("3 5 6 7 10"));
}
}
蓝桥杯——剪邮票(2016JavaB组第10题)的更多相关文章
- 第七届蓝桥杯省赛javaB组 第七题剪邮票
剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是合格的 ...
- 蓝桥杯 剪邮票 全排列+DFS
剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是 ...
- java实现第七届蓝桥杯剪邮票
剪邮票 题目描述 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所 ...
- 蓝桥杯 剪邮票(dfs枚举 + bfs)
剪邮票 如图1, 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,图2,图3中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少种不同的 ...
- 蓝桥杯 剪邮票 DFS (不错的题目)
剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是合格的 ...
- 蓝桥杯——复数幂 (2018JavaAB组第3题)
18年Java蓝桥杯A组第3题和B组是一样的. 第三题往往比较难. 复数幂 (18JavaAB3) (A.B两卷第三题一样) 设i为虚数单位.对于任意正整数n,(2+3i)^n 的实部和虚部都是整数. ...
- 蓝桥杯——快速排序(2018JavaB组第5题9分)
快速排序(18JavaB5,9') 以下代码可以从数组a[]中找出第k小的元素. 它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的. 请仔细阅读分析源码,填写划线部分缺失的内容. impo ...
- 2015年蓝桥杯省赛B组第3题--三羊献瑞
三羊献瑞 观察下面的加法算式: 祥 瑞 生 辉 + 三 羊 献 瑞 ------------------- 三 羊 生 瑞 气 (如果有对齐问题,可以参看[图1.jpg]) 其中,相同的 ...
- 蓝桥杯——分组比赛(2017JavaB组第3题)
分组比赛(17JavaB3) 9名运动员参加比赛,需要分3组进行预赛. 有哪些分组的方案呢? 标记运动员为 A,B,C,... I 下面的程序列出了所有的分组方法: ABC DEF GHI ABC D ...
随机推荐
- viewpager欢迎页面底部点的滑动效果
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layo ...
- ServletUtils取值(限foton)
1.String query = ServletUtils.getStringValue(request, "query", null); 2.boolean reload = S ...
- EasyExcel使用心得
最近项目中用到了阿里easyExcel做导入导出功能 下面是我写的一个工具类,带泛型的.拿来即用,有需求的小伙伴可以看看. 同时也欢迎大佬提出修改意见. 一.首先先写一个生成Excel表头的DTO类, ...
- SDOI征途--斜率优化
题目描述 给定长为 n 的数列 a, 要求划分成 m 段,使得方差最小, 输出方差\(*m^2\) 题解 斜率优化好题 准备部分 设第 i 段长为 \(len_i\) 先考虑方差(\(S^2\))的式 ...
- TCP连接性能指标之TCP关闭过程(四次挥手)
TCP关闭过程(四次挥手): ESTABLISHED: 当前建立连接状态 CLOSE_WAIT:Server端收到来自Client端的FIN包后,发送ACK回Client端,进入CLOSE_WAIT ...
- Linux 系统编程 学习:00-有关概念
Linux 系统编程 学习:00-有关概念 背景 系统编程其实就是利用系统中被支持的调度API进行开发的一个过程. 从这一讲开始,我们来介绍有关Linux 系统编程的学习. 知识 在进行Linux系统 ...
- python中的evalexec 将字符串当做代码执行
eval/exec 将字符串当做代码执行 eval/exec 这两个函数可以将字符串解析为代码并执行. 区别 1.eval 解析变量和表达式, 而 exec 解析语句 a = '1' print(ev ...
- Magicodes.IE 3.0重磅设计畅谈
总体设计 Magicodes.IE导入导出通用库,支持Dto导入导出.模板导出.花式导出以及动态导出,支持Excel.Csv.Word.Pdf和Html. IE在去年年底重构一次之后,经过这么长时间的 ...
- 【SpringBoot】08.SpringBoot整合jsp
SpringBoot整合jsp 1.修改pom文件加入两个坐标jstl标签库和jasper <project xmlns="http://maven.apache.org/POM/4. ...
- Ubuntu 18.04 Java JDK/JRE 安装命令
安装默认版本 sudo apt install default-jdk Java 8 sudo apt install openjdk-8-jdk 如果我们在服务器上安装了多个Java版本,我们可以使 ...