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

分析与题解

本着暴力出奇迹的原则,先用暴力法的思想考虑了一通, 发现用暴力法完全没办法判断格子的连通性, 于是转向DFS解法。

正常考虑:每个格子作为起点,DFS连五张格子,最后去重, 最终得到最后结果。但由于正常情况下DFS没办法同时向两个方向保持探索, 因此无法解决T型剪纸的问题,如

那么如何检测T型剪纸呢?
我们可以通过循环暴力求解出剪出5个格子的所有方案, 对每个方案进行连通性检测(类似迷宫), 若连通,则累加, 最后输出累加结果。

注意:在设定mp数组时,将{1,2,3,4,5,6,7,8,9,10,11,12}改为{1,2,3,4, 6,7,8,9, 11,12,13,14} 即可轻松判断某一格子是否在其两侧或上下

最后贴上代码,代码中有详细的注释。


代码展示

#include<iostream>
#include<algorithm>
using namespace std;
int mp[12] = {1,2,3,4, 6,7,8,9, 11,12,13,14};
int aa[5];          //五个格子的编号
int vis[5];         //每个格子是否被访问过
int sum = 0;       //结果
int b[4] = {-1, 1, -5, +5};       //通过b数组检测是否有格子连通 void dfs(int n) {      //检测连通性 for(int i = 0; i < 4; i++) {  //遍历b数组,检测格子的联通性 int t = aa[n] + b[i];     //用t存储 if(t<1 || t>14 || t==5 || t==10) continue;//t值不规范,结束本层循环 //从0开始, for(int j = 0; j < 5; j++)    //开始检测五个格子中的每个格子是否与编号为n的格子连通 if(!vis[j] && aa[j]==t) {    //若某格子既没被访问过,又与编号为n的格子连通 vis[j] = 1;            //该格子改为被访问过 dfs(j);             //从该格子开始继续向下dfs }}
}int main() {ios::sync_with_stdio(false);   //加快c++速度 for(int a = 0; a < 12; a++)   //五层循环,寻找任意5格子。 for(int b = a+1; b < 12; b++)for(int c = b+1; c < 12; c++) for(int d = c+1; d < 12; d++)for(int e = d+1; e < 12; e++) {  aa[0]=mp[a]; aa[1]=mp[b]; aa[2]=mp[c]; aa[3]=mp[d]; aa[4]=mp[e];   //赋值 for(int i = 0; i < 5; i++) vis[i] = 0;  //每次判断前先初始化 vis[0] = 1;        //从第一个格子开始,因此第一个格子一定被访问过 dfs(0);         //从0开始回溯 int flag = 1;for(int i = 0; i < 5; i++)     //最后判断5个格子是否都被访问过,若是,则连通。 if(vis[i] != 1) {flag = 0; break;}if(flag == 0) continue;else sum++;} cout << sum << endl;
return 0; }

这世界就是,一些人总在昼夜不停的努力,而另外一些人,起床就发现世界已经变了。

原理详解与标准解法——蓝桥杯_2016年省赛B组 第七题 剪邮票(暴力+迷宫变形)相关推荐

  1. 测试次数----2018年第九届蓝桥杯C/C++省赛B组 第四题

    题目描述 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市 ...

  2. 2020年第十一届蓝桥杯第二场省赛B组C++题解

    2020年第十一届蓝桥杯第二场省赛B组C++题解 题单 第一题 第二题 第三题 第四题 第五题 第六题 第七题 第八题 题单 第一题 小蓝要为一条街的住户制作门牌号. 这条街一共有 2020 位住户, ...

  3. 蓝桥杯2013年国赛A组——网络寻路(DFS和中转边巧解)

    蓝桥杯2013年国赛A组--网络寻路 1.题目描述 2.输入输出 3.样例输入和输出 4.题目分析 1.首先明确,题目中的目的地有两种,一种是回到原点,一种是到达没有到达的地方 2.在路径中经过的点不 ...

  4. 2021年第十二届蓝桥杯软件类省赛python组

    目录 2021年第十二届蓝桥杯软件类省赛python组 1.卡片 常规做法 使用functions.Counter计数 2.直线 3.货物摆放 4.路径 5.回路计算 递归--太慢跑不出来 状态压缩D ...

  5. 2021年第十二届蓝桥杯软件类省赛python组试题及其解析。

    目录 一.卡片 二.直线 三.货物摆放 四.路径 五.回路计算 六.时间显示 七.杨辉三角 八.左孩子右兄弟 九.异或数列 十.括号序列 一.卡片 本题总分:5分 [问题描述] 小蓝有很多数字卡片,每 ...

  6. 使用JavaScript解答2018第九届蓝桥杯C/C++省赛A组试题

    大三时参加过第七届蓝桥杯个人赛及团队赛,转眼已经两年,最近看了看第九届蓝桥杯试题,打算用JavaScript实现一下. 题目1 标题:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + ...

  7. 2018年第九届蓝桥杯【C++省赛B组】【第三题:乘积尾零】——附解题代码

    欢迎大家加入CSDN-蓝桥杯竞赛社区 https://bbs.csdn.net/forums/lanqiaobei 蓝桥杯历届题目及解析汇总(附思路及代码)[点击此进入] 蓝桥杯,ACM算法学习[文档 ...

  8. 2019 第十届蓝桥杯C/C++ 省赛B组题解

    文章目录 前言 试题 A: 组队 试题 B: 年号字串 试题 C: 数列求值 试题 D: 数的分解 试题 E: 迷宫 试题 F: 特别数的和 试题 G: 完全二叉树的权值 试题 H: 等差数列 试题 ...

  9. 2019年第十届蓝桥杯 C / C ++省赛 B 组真题题解

    A: 组队 输入数据 编号 号位1 2 3 4 51 97 90 0 0 0 2 92 85 96 0 0 3 0 0 0 0 93 4 0 0 0 80 86 5 89 83 97 0 0 6 82 ...

最新文章

  1. 前后端分离和微服务_为什么说微服务,要从前后端分离开始?一文带你揭秘深入微服务...
  2. [渝粤教育] 长沙民政职业技术学院 高职公共英语(一) 参考 资料
  3. 时间序列 - 案例按步骤详解 -(SPSS建模)
  4. android api文档中文版_什么骚操作,用Android能写后台服务?
  5. Generator 简介
  6. php编写个人所得税单元测试,php趣味编程-php求个人所得税
  7. 数字电路与微型计算机原理,电子科技大学1999年考研真题-微机原理与数字电路...
  8. vs2013使用remote debug
  9. 宝塔系统linux xss,宝塔漏洞 XSS窃取宝塔面板管理员漏洞高危
  10. 解读Depth Map Prediction from a Single Image using a Multi-Scale Deep Network (1)
  11. 基于halcon的颜色识别---杜邦线识别
  12. 从我的历程谈谈该如何学习
  13. 程序员学习时间的由来
  14. 常见的Web服务器、应用服务器(Apache、tomcat、jetty、Nginx)简介及优缺点总结
  15. windows service.bat java 内存设置_Tomcat加大内存设置从windows服务启动不生效的问题...
  16. 7 自定义 Git - Pro Git
  17. Hadoop中的slaves文件
  18. 基于stm32的智能小车(远程控制、避障、循迹)
  19. DLNA介绍(包含UPnP,2011/6/20 更新)
  20. stm32驱动sd卡(1)

热门文章

  1. python 去除所有的中文 英文标点符号
  2. RabbitMQ管理(2)——用户管理
  3. 队列实现栈 | 栈实现队列
  4. 视频编码器的智能化——AI辅助编解码的ASIC解决方案
  5. 【直播预告 | 今天10:30】多媒体技术 PI 第一期:OSS圆桌
  6. 基于主观感兴趣区域的视频编码实践
  7. 音视频技术开发周刊 | 143
  8. 展望二十一世纪第三个十年
  9. 探索多媒体开发最新最佳实践(内附资料下载)
  10. LeetCode——BFS