蓝桥杯比赛关于 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

时间: 2024-10-04 12:49:56

蓝桥杯比赛关于 BFS 算法总结方法以及套路分析的相关文章

蓝桥杯 贪心模板 _算法提高 快乐司机

#include <iostream> #include <cstdio> #include <algorithm> #include <cstdlib> using namespace std; const int maxn = 10000 + 200; struct Lorry { float weight; float value; float pro; Lorry(float w = 0, float v = 0, float pro = 0) :

第五届蓝桥杯C++本科A组

今天上午参加了第五届蓝桥杯比赛,还是去年的地方,还是去年的考场,不同的是经过了一年的历练,多了一份坦然与自信.不管最后结果如何,是对自己一年学习的一个小小的交代.ACMER IN HHUC, we never say no. 结果填空 1. a*a+b*b+c*c=1000;a,b,c均为整数,求一组解中的最小值.暴力的题目,很容易就想到了0,10,30.所以没多想就填上了0,可是考完发现还可以是负数...悲了个剧了,三分就这么水没了.. 2. 类似于往年的一道高斯的生日,求距离某一天(yyyy

第八届蓝桥杯省赛题解

一直以来,自己的科技类竞赛实在太少了,确实是自己的问题,从大学没有对自己有一个明确的规划,现在再回过头去恶补很多的知识点.悔当初,甚至怀疑自己,却已经来不及,最近因为某些人某些事让自己心情变得十分差,把自己弄得狼狈不堪. 今年是第一次参加蓝桥杯比赛,原本寒假就打算好好复习的,一直没有静下心来准备,正式做题是在比赛前3天.校区是在绵阳师范墨家小区,还以为头一天就要赶过去,后面接到学院老师的电话说一起跟着大部队过去,于是就在早上6点起来,看了会算法,吃早餐后就随着校车去了. 这次去参赛的都是比较厉害

2015蓝桥杯决赛

五月二十八号,坐上了开往北京的火车.第一次到北京参加全国性的比赛,第六届蓝桥杯决赛,心里面还是很兴奋的,同时也有一点点紧张,还是希望自己能拿一个比较好的成绩.提前一天到,大家看了看考场,比赛地点在北大计算中心,30号下午一点开始了正式的比赛,比赛时间四个小时. 比赛题目类型和初赛差不多,有结果填空,代码填空和程序设计三种类型.但是题量少很多,一共只有六道,分别是两道结果填空,一道代码填空,三道编程大题.我参加的是C++本科A组,比赛结束了,凭印象还是先把题目总结一下. A.结果填空 题目大意:有

蓝桥杯-猜年龄问题

问题描述: 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学.他曾在1935~1936年应邀来中国清华大学讲学. 一次,他参加某个重要会议,年轻的脸孔引人注目.于是有人询问他的年龄,他回答说:"我年龄的立方 是个4位数.我年龄的4次方是个6位数.这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次."请你推算一下,他当时到底有多年轻.通过浏览器,直接提交他那时的年龄数字. 注意:不要提交解答过程,或其它的说明文字! 问题分析: 这是蓝桥杯比赛时的一道填空题,而非程

蓝桥杯-最短路 (SPFA算法学习)

SPFA算法主要用来解决存在负边权的单源最短路情况(但不能有负环!!!)一个简单的方法判断是否有没有负环可以通过判断是否有一个节点是否频繁进出队列. 以下内容转自https://blog.csdn.net/xunalove/article/details/70045815 求单源最短路的SPFA算法的全称是:Shortest Path Faster Algorithm. SPFA算法是西南交通大学段凡丁于1994年发表的. 从名字我们就可以看出,这种算法在效率上一定有过人之处. 很多时候,给定的

算法笔记_206:第五届蓝桥杯软件类决赛真题(Java语言A组)

目录 1 海盗分金币 2 六角幻方 3 格子放鸡蛋 4 排列序数 5 幂一矩阵 6 供水设施   1 海盗分金币 有5个海盗,相约进行一次帆船比赛. 比赛中天气发生突变,他们被冲散了. 恰巧,他们都先后经过途中的一个无名的荒岛,并且每个人都信心满满,觉得自己是第一个经过该岛的人. 第一个人在沙滩上发现了一堆金币.他把金币分成5等份.发现刚好少一个金币.他就从自己口袋拿出一个金币补充进去,然后把属于自己的那份拿走. 第二个到达的人也看到了金币,他也和第一个人一样,把所有金币5等分,发现刚好缺少一个

算法-蓝桥杯习题

蓝桥杯习题 习题更新ing...... 入门训练(4题) 1 /* 2 入门训练 A+B问题 3 4 问题描述 5 输入A.B,输出A+B. 6 说明:在“问题描述”这部分,会给出试题的意思,以及所要求的目标. 7 输入格式 8 输入的第一行包括两个整数,由空格分隔,分别表示A.B. 9 说明:“输入格式”是描述在测试你的程序时,所给的输入一定满足的格式. 10 11 做题时你应该假设所给的输入是一定满足输入格式的要求的,所以你不需要对输入的格式进行检查.多余的格式检查可能会适得其反,使用你的程

算法-蓝桥杯习题(七)

蓝桥杯习题 蓝桥杯练习系统习题加答案,总共分为6部分,90%习题使用C语言解答,部分使用C++或者Java.大部分习题为搜索参考或者别人提供所得,不足之处在所难免,恳请批评指正(预计200多题,习题仅供学习交流) 目录 算法训练(详见 算法-蓝桥杯习题(一))Go 算法训练(详见 算法-蓝桥杯习题(二))Go 算法提高(waiting...) 历届试题(详见 算法-蓝桥杯习题(六))Go 历届试题(详见 算法-蓝桥杯习题(七))Go 蓝桥杯练习系统评测数据 链接: http://pan.baid