蓝桥杯比赛关于 BFS 算法总结方法以及套路分析
首先我们来看几道java A组的题目,都是同一年的哦!!!
搭积木
小明最近喜欢搭数字积木,
一共有10块积木,每个积木上有一个数字,0~9。
搭积木规则:
每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。
最后搭成4层的金字塔形,必须用完所有的积木。
下面是两种合格的搭法:
0
1 2
3 4 5
6 7 8 9
0
3 1
7 5 2
9 8 6 4
请你计算这样的搭法一共有多少种?
请填表示总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
先帖代码:
public class test4 {
int a[]=new int[20]; //java 数组初始化值为0
int visit[]=new int[20]; //判断是否使用过
static int count1=0;
public void dfs1(int x){
if(x==10){
if(a[0]<a[1]&&a[0]<a[2] //这里没有进行剪枝操作,因为不方便
&&a[1]<a[3]&&a[1]<a[4]&&a[2]<a[4]&&a[2]<a[5]
&&a[3]<a[6]&&a[3]<a[7]&&a[4]<a[7]&&a[4]<a[8]&&a[5]<a[8]&&a[5]<a[9]){
count1++;
return;
}
} for(int i=0;i<10;i++){
if(visit[i]==0){ //深度搜索套路代码,只可意会
a[x]=i;
visit[i]=1;
dfs1(x+1);
visit[i]=0;
}
}
return; //这个return是当前面的所有的都不成立时回溯(return)到最初调用for循环内的dfs处
} public static void main(String[] args){
new test4().dfs1(0);
System.out.println(count1);
}
}
结果:768
题目二:
寒假作业
现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
(如果显示不出来,可以参见【图1.jpg】)
每个方块代表1~13中的某一个数字,但不能重复。
比如:
6 + 7 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5
以及:
7 + 6 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5
就算两种解法。(加法,乘法交换律后算不同的方案)
你一共找到了多少种方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
代码:
public class test3 {
int a[]=new int[20]; //java 数组初始化值为0
int visit[]=new int[20];
static int count=0;
public void dfs(int x){ //相当于剪枝操作
/*if(x>3&&a[1]+a[2]!=a[3]) //如果前三个数已经被取出来但不符合题设条件,则返回重找
return;
if(x>6&&a[4]-a[5]!=a[6]) //若前三个数满足第一条,看4-6个数是否满足第二个条件
return;
if(x>9&&a[7]*a[8]!=a[9]) //同上
return;
if(x>12&&a[12]*a[11]==a[10]) //如果所有条件均满足,则让count++
{
count++;
return;
}*/
if(x>12){
if((a[1]+a[2]==a[3])&&(a[4]-a[5]==a[6])&&(a[7]*a[8]==a[9])&&(a[12]*a[11]==a[10])){
count++;
return;
}
}
for(int i=1;i<14;i++){
if(visit[i]==0){ //深度搜索套路代码
a[x]=i;
visit[i]=1;
dfs(x+1);
visit[i]=0;
}
}
return; //这个return是当前面的所有的都不成立时回溯(return)到最初调用for循环内的dfs处
} public static void main(String[] args){
new test3().dfs(1);
System.out.println(count);
}
}
结果: 64
第三题:
方格填数
如下的10个格子
+--+--+--+
|0 | 1| 2|
+--+--+--+--+
| 3| 4| 5| 6|
+--+--+--+--+
| 7| 8| 9|
+--+--+--+
(如果显示有问题,也可以参看【图1.jpg】)
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
代码:
public class test5 { int a[]=new int[20]; //java 数组初始化值为0
int visit[]=new int[20]; //判断是否使用过
static int count1=0;
public void dfs1(int x){
if(x==10){
if(
(Math.abs(a[0]-a[1])!=1)&&
(Math.abs(a[0]-a[3])!=1)&&
(Math.abs(a[0]-a[4])!=1)&&
(Math.abs(a[0]-a[5])!=1)&&
(Math.abs(a[1]-a[2])!=1)&&
(Math.abs(a[1]-a[4])!=1)&&
(Math.abs(a[1]-a[5])!=1)&&
(Math.abs(a[1]-a[6])!=1)&&
(Math.abs(a[2]-a[5])!=1)&&
(Math.abs(a[2]-a[6])!=1)&&
(Math.abs(a[3]-a[0])!=1)&&
(Math.abs(a[3]-a[4])!=1)&&
(Math.abs(a[3]-a[7])!=1)&&
(Math.abs(a[3]-a[8])!=1)&&
(Math.abs(a[4]-a[5])!=1)&&
(Math.abs(a[4]-a[7])!=1)&&
(Math.abs(a[4]-a[8])!=1)&&
(Math.abs(a[4]-a[9])!=1)&&
(Math.abs(a[5]-a[6])!=1)&&
(Math.abs(a[5]-a[8])!=1)&&
(Math.abs(a[5]-a[9])!=1)&&
(Math.abs(a[6]-a[9])!=1)&&
(Math.abs(a[7]-a[8])!=1)&&
(Math.abs(a[8]-a[9])!=1)
){
count1++;
return;
}
/* if(a[0]!=a[1]&&a[0]!=a[3]&&a[0]!=a[4]&&a[0]!=a[5]
&&a[1]!=a[0]&&a[1]!=a[2]&&a[1]!=a[4]&&a[1]!=a[5]&&a[1]!=a[6]
&&a[2]!=a[1]&&a[2]!=a[5]&&a[2]!=a[6]
&&a[3]!=a[0]&&a[3]!=a[0]&&a[3]!=a[7]
&&a[4]!=a[0]&&a[4]!=a[1]&&a[4]!=a[3]&&a[4]!=a[5]&&a[4]!=a[7]&&a[4]!=a[8]&&a[4]!=a[9]
&&a[5]!=a[0]&&a[5]!=a[1]&&a[5]!=a[2]&&a[5]!=a[4]&&a[5]!=a[6]&&a[5]!=a[8]&&a[5]!=a[9]
&&a[6]!=a[1]&&a[6]!=a[2]&&a[6]!=a[5]&&a[6]!=a[9]
&&a[7]!=a[3]&&a[7]!=a[4]&&a[7]!=a[8]
&&a[8]!=a[3]&&a[8]!=a[4]&&a[8]!=a[5]&&a[8]!=a[7]&&a[8]!=a[9]
&&a[9]!=a[4]&&a[9]!=a[5]&&a[9]!=a[6]&&a[9]!=a[8]){
count1++;
return;
}*/
} for(int i=0;i<10;i++){
if(visit[i]==0){ //深度搜索套路代码,只可意会
a[x]=i;
visit[i]=1;
dfs1(x+1);
visit[i]=0;
}
}
return; //这个return是当前面的所有的都不成立时回溯(return)到最初调用for循环内的dfs处
} public static void main(String[] args){
new test5().dfs1(0);
System.out.println(count1);
} }
执行结果: 1580
蓝桥杯比赛关于 BFS 算法总结方法以及套路分析的更多相关文章
- C语言蓝桥杯比赛原题和解析
蓝桥杯:在计算机编程领域,是具有一定含金量的竞赛,用于选拔信息技术人才. 一般分为多个领域,其中包含了C/C#/C++/Java/Python等编程语言的测试题,多为算法的设计题. 下面,在搜题过程中 ...
- 蓝桥杯比赛java 练习《立方变自身》
立方变自身 观察下面的现象,某个数字的立方,按位累加仍然等于自身.1^3 = 1 8^3 = 512 5+1+2=817^3 = 4913 4+9+1+3=17... 请你计算包括1,8, ...
- 蓝桥杯比赛javaB组练习《方格填数》
方格填数 如下的10个格子 +--+--+--+ | | | |+--+--+--+--+| | | | |+--+--+--+--+| | | |+--+--+--+ ( ...
- 蓝桥杯 穿越雷区(bfs)
题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废.某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? ...
- 蓝桥杯 卡片换位(bfs)
卡片换位 你玩过华容道的游戏吗?这是个类似的,但更简单的游戏.看下面 3 x 2 的格子 在其中放5张牌,其中A代表关羽,B代表张飞,* 代表士兵.还有一个格子是空着的. 你可以把一张牌移动到相邻的空 ...
- 蓝桥杯 调手表(bfs解法)
小明买了块高端大气上档次的电子手表,他正准备调时间呢. 在 M78 星云,时间的计量单位和地球上不同,M78 星云的一个小时有 n 分钟. 大家都知道,手表只有一个按钮可以把当前的数加一.在调分钟的时 ...
- 蓝桥杯比赛javaB组练习《生日蜡烛》
题目如下: 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛. 现在算起来,他一共吹熄了236根蜡烛. 请问,他从多少岁开始过生日party的? 请填写他开始 ...
- 蓝桥杯比赛javaB组练习《四平方和》
四平方和 四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和.如果把0包括进去,就正好可以表示为4个数的平方和. 比如:5 = 0^2 + 0^2 + 1^2 + 2^27 ...
- 蓝桥杯比赛javaB组练习《牌型种数》
牌型种数 小明被劫持到X赌城,被迫与其他3人玩牌.一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张.这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌 ...
随机推荐
- fdisk 非交互式创建 分区
一. key 非交互式创建分区, 与 交互式创建分区区别不大. 使用 fdisk 的默认选项, 使用空行即可, 不用回车. 创建 主分区 和 扩展分区时, 需要注意 分区号 二. 创建主分区 fdis ...
- angular之$watch、$watchGroup、$watchCollection
1,原型:$watch: function(watchExp, listener, objectEquality, prettyPrintExpression){}: 2,参数:watchExp(必须 ...
- PHP设计模式:工厂方法
示例代码详见https://github.com/52fhy/design_patterns 工厂方法 工厂方法是针对每一种产品提供一个工厂类.通过不同的工厂实例来创建不同的产品实例. 相比简单工厂, ...
- ASP搜索查询
html code: <form name="frm_Search" method="get" action="Search.asp" ...
- Linux系统安全配置基线
一:共享账号检查 配置名称:用户账号分配检查,避免共享账号存在 配置要求:1.系统需按照实际用户分配账号: 2.避免不同用户间共享账号,避免用户账号和服务器间通信使用的账号共享. 操作指南:参考配置操 ...
- Linux 安装依赖库
###安装依赖库###yum -y install rsync net-snmp syslog net-snmp-devel wget patch screen gcc gcc-c++ autocon ...
- JavaScript深入之从原型到原型链(本文转载)
JavaScript深入之从原型到原型链(本文转载) https://github.com/mqyqingfeng/Blog.原文地址 构造函数创建对象 我们先使用构造函数创建一个对象: functi ...
- c++数组易错点总结
c++数组 1.只有在定义数组是才能使用初始化,此后就不能使用了,也不能将一个数组赋给另一个数组 int cards[4] = { 3 , 6 , 8 , 10}; //ok int hands[4] ...
- Go学习笔记(二)十分钟上手
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 变量&常量 变量 变量名由字母.数字.下划线组成,不能以数字开头. ... var ( A int //默 ...
- asp.net Mvc 动态创建Controller
有这么个需求,Urls如下: http://localhost:52804 http://localhost:52804/home/test http://localhost:52804/test1 ...