蓝桥杯比赛关于 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张.这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌 ...
随机推荐
- Laravel踩坑笔记——illuminate/html被抛弃
起因 在使用如下代码的时候发生报错 {!! Form::open() !!} 错误信息 [Symfony\Component\Debug\Exception\FatalErrorException] ...
- php后台拼接输出table表格
<?php header("Content-type:text/html;charset=utf-8"); $str=''; $str.='<table border= ...
- 进程cookie与硬盘cookie
内存cookie,是指没有设在cookie的Expires(过期时间)的属性硬盘cookie,是指在你设置了cookie的Expires(过期时间)属性 关于session的几点理解与测试 同一个浏览 ...
- oracle11g的内存分配不当,导致的错误ORA-01034,ORA-00838,ORA-27101
由于开发需要,oracle11g被应用于虚拟机,所以系统资源显得弥足珍贵,百度了一下就有答案. 用dba身份进入Oracle,笔者在plsql中对数据库进行管理: show parameter sga ...
- JQuery事件机制笔记
一.事件绑定及移除 1.bind() bind()为每个匹配的元素绑定一个或多个事件处理函数: 语法:bind(event,fn)//不能给未来元素添加事件: bind(event,fn); bind ...
- video+ audio
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- PILLOW图片中加入中文 曲线救国Opencv
索引 简述 准备 示例 效果图 结语 简述 我在使用opencv2或3的时候想要在图片上添加中文文字,需要去下载Freetype库,编译好链接到opencv库中才能中文的输出.网上大部分在图片中插入中 ...
- Failed to sync Gradle project 'XX'错误解决
错误代码 Failed to sync Gradle project 'WeChat' Error:Failed to find target with hash string 'android-24 ...
- Teacher implements java.io.Serializable
package JBJADV003; public class Teacher implements java.io.Serializable{ private String name; privat ...
- JavaWeb 后端 <九> 之 JDBC加强
一.大结果集的分页(重点,难点) 1.分批次查询:分页 2.基于数据库的分页:依赖的是数据库的分页语句(不同数据库是不同的) MySQL:每页显示10条. select * from XXX limi ...