Question:

Result:  116

Solve:

这个题意还是比较好懂的,就是12个数里找出5个数,然后看这5个数在方格中的位置是否相连,

代码也是这个思路,但确实不太好写,我换了好几种方案,最后写成了类似DFS里又套一个DFS的代码。

首先通过深搜去搞出12选5的全部组合,然后通过再一个DFS去判断选出的5个数在方格中是不是连通块

我写的判断连通块的方法是一个最暴力的方法,模拟出方格,然后从选出的第一个数(同时计数为1)开始,判断其四周有没有选出的数,如果有,计数加一,并去dfs那个数,在不断搜索的过程中如果计数到了5,就说明5个数是连在一起的,结果数加一。

上代码吧,注释写的也比较多。

Code:

#include <bits/stdc++.h>
using namespace std;int cnt, res = 0;  //res记录结果
bool vis[4][5]; //标记选出的5个数的坐标
bool vis2[4][5]; //标记5个坐标在dfs过程中是否经过
int dir[4][2] = {1,0,-1,0,0,1,0,-1}; //四个方向 //判断是不是连通块
void dfs(int x, int y)
{//是连通块,结果加一 if(cnt == 5) res++;for(int i = 0; i < 4; i++){int dx = x + dir[i][0];int dy = y + dir[i][1];//边界检测,是否已经走过检测 if(vis2[dx][dy] || dx < 1 || dy < 1 || dx > 3 || dy > 4) continue;//是否为选中数判断 if(!vis[dx][dy]) continue;cnt++; vis2[dx][dy] = true;dfs(dx,dy);}
}//12选5的全排列
void que(int deep, int num)
{if(deep > 5){cnt = 1;memset(vis2,false,sizeof(vis2));//找出第一个选出的数字进入连通块判断 for(int i = 1; i <= 3; i++){for(int j = 1; j <= 4; j++){if(vis[i][j]){vis2[i][j] = true;dfs(i,j);//判断结束后直接返回 return;}}}}//进行全排列,并且将选出的数以坐标的形式标记下来 for(int i = num+1; i <= 12; i++){if(i%4==0){vis[i/4][4] = true;que(deep+1,i);vis[i/4][4] = false;}else{vis[i/4+1][i%4] = true;que(deep+1,i);vis[i/4+1][i%4] = false;}}
}int main(void)
{memset(vis,false,sizeof(vis));que(1,0);cout <<res;return 0;
}

最后附上蓝桥杯汇总链接:蓝桥杯C/C++A组省赛历年真题题解

声明:图片均来源于蓝桥杯官网,以个人刷题整理为目的,如若侵权,请联系删除~

蓝桥杯.剪邮票(DFS)相关推荐

  1. 第七届蓝桥杯-剪邮票(深搜+广搜)

    剪邮票 如下图, 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连)比如,下面两个图中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少种不 ...

  2. [蓝桥杯] 剪邮票 (Python 实现)

    题目: 代码: import itertools count=0 a=[1,2,3,4,6,7,8,9,11,12,13,14] b=list(itertools.combinations(a,5)) ...

  3. 蓝桥杯-迷宫(DFS)

    蓝桥杯-迷宫(DFS) 题目描述 X 星球的一处迷宫游乐场建在某个小山坡上.它是由 10 \times 1010×10 相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡 ...

  4. 蓝桥杯笔记:DFS(深度优先搜索)解决问题

    DFS: 深度优先搜索: 访问当前的元素后,递归访问元素的邻接元素(找出所有下一步的可能元素,判断是否能访问),撤回当前元素访问 dfs(当前状态) {//递归终止条件if(当前状态==结束状态) { ...

  5. java实现第四届蓝桥杯剪格子

    剪格子 题目描述 如图p1.jpg所示,3 x 3 的格子中填写了一些整数. 我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是60. 本题的要求就是请你编程判定:对给定的m x n 的格子 ...

  6. 蓝桥杯 排列数(DFS搜索)

    算法提高 排列数   时间限制:1.0s   内存限制:256.0MB      问题描述 0.1.2三个数字的全排列有六种,按照字母序排列如下: 012.021.102.120.201.210 输入 ...

  7. 蓝桥杯2016省赛真题-剪邮票(dfs)

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

  8. [蓝桥杯2016初赛]剪邮票-dfs+next_permutation(好题)

    题目描述 如下图, 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连) 比如,下面两张图中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少种不 ...

  9. 蓝桥杯 作物杂交 DFS搜索

    参考代码: #include<bits/stdc++.h> #define INF 0x3f3f3f3f using namespace std; typedef long long ll ...

最新文章

  1. 传统数据中心穿上“云”外衣 任重而道远
  2. matlab decomposition filters,MATLAB小波去噪求助(附算法和显示图片)!不知自己哪个地方出了问题,求指点! - 信息科学 - 小木虫 - 学术 科研 互动社区...
  3. 黑莓blackberry手机刷ROM 的详细教程
  4. python实现二叉堆中的大顶堆(大根堆)
  5. 【数据库系统概论】考研第二部分重点分析【2.2】
  6. java 异常 规范_java 异常规范
  7. 【附可运行代码】剑指 Offer 16. 数值的整数次方
  8. LeetCode 1688. 比赛中的配对次数(模拟)
  9. Git 相关使用命令
  10. 聚宽macd底背离_很多散户可能永远都不会知道:MACD月线金叉,每一次MACD月金叉都会带来一波牛市...
  11. java代码用户界面网格布局GridLayout.划分为格子区域
  12. 50预训练权重_MMDetection笔记:修改预训练模型权重类别数
  13. java 镶嵌创建线程_请教一个 Java 多线程嵌套使用的问题
  14. 3种时间复杂度实现不同类型的无序数组去重
  15. update set命令用来修改表中的数据
  16. 我和《独角兽项目》背后的故事
  17. bootbox.js bootbox.promt()
  18. MySQL安装2出现Typical_Mysql安装 - osc_c7lpn2ge的个人空间 - OSCHINA - 中文开源技术交流社区...
  19. 3分钟看懂:7大教育培训企业邮件营销 (附案例)
  20. 搭建公司内部论坛 只需简单三步 1 (安装Discuz)

热门文章

  1. css筋斗云,CSS3 七龙珠筋斗云动画
  2. ddns与内网穿透软件
  3. iOS 小数向上、下取整
  4. 深挖洞广积粮 旷视印奇谈7.5亿美元D轮融资后的战略布局
  5. for循环的说课c语言,教学设计《程序的循环结构-For循环语句》
  6. linux测试dvi接口,支持Linux系统的高清DVI采集卡推荐
  7. 2019.9.6HTML5学习心得02
  8. php扩容方案,PHP程序员玩转Linux系列-腾讯云硬盘扩容挂载
  9. 荣耀X10 Max配置怎么样?今天来聊一聊
  10. Android高手笔记 - IO优化