剪邮票

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

请你计算,一共有多少种不同的剪取方法。

请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

        图1                   图2                   图3

思路:1、首先从12数中选出5个数(求其所有组合数) 用dfs(保证五个数是递增的,避免重复) ,存入一维数组a中

   2、将a中的这五个数转化为二维坐标形式,然后将其在地图上置1(将vis置1),再用bfs判断地图上这5个置1的数是否相连

 #include<iostream>
#include<algorithm>
#include<queue>
#include<cstring> using namespace std; int a[];
int vis[][]; //下标为0的不用
int dx[] = { ,-,, };
int dy[] = { ,,,- }; int result = ; struct node
{
int x, y;
}s; void bfs(int a[])
{
memset(vis, , sizeof(vis)); //记得将vis置零,防止有残余的1
int x, y; //把一维下标转换为二维坐标
for (int i = ; i <= ; ++i)
{
if (a[i] % == )
{
x = a[i] / ;
y = ;
}
else
{
x = a[i] / + ;
y = a[i] % ;
}
vis[x][y] = ;
} s.x = x;
s.y = y; queue<node>Q;
Q.push(s);
vis[s.x][s.y] = ;
int num = ; node t;
while (!Q.empty())
{
t = Q.front();
Q.pop(); for (int i = ; i < ; ++i)
{
int xx = t.x + dx[i];
int yy = t.y + dy[i];
if (xx >= && xx <= && yy >= && yy <= && vis[xx][yy] == )
{
++num; //每有一个相连,num就自增
vis[xx][yy] = ;
s.x = xx;
s.y = yy;
Q.push(s);
}
}
} if (num == ) //如果这5个数都相连
{
++result;
} } void dfs(int step) //从12个数中取出5个(即12取5的所有组合),存入一维数组a中(从下标1开始存储)
{
if (step == )
{
bfs(a); //用bfs判断取出的这5个数在图中是否相连
return;
} for (int i = ; i <= ; ++i)
{
if (i > a[step - ]) //以递增的顺序选出,可以防止重复
{
a[step] = i;
dfs(step + );
}
} } int main()
{
memset(a, , sizeof(a));
dfs();
cout << result << endl; return ;
}

蓝桥杯 剪邮票(dfs枚举 + bfs)的更多相关文章

  1. 蓝桥杯 剪邮票 DFS (不错的题目)

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

  2. 蓝桥杯---剪格子(DFS&BFS)(小总结)

    问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+ ...

  3. 蓝桥杯 剪邮票 全排列+DFS

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

  4. java实现第七届蓝桥杯剪邮票

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

  5. 蓝桥杯——剪邮票(2016JavaB组第10题)

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

  6. 蓝桥杯剪格子dfs

    #include<iostream> #include<cstring> #include<iomanip> #include<cmath> #incl ...

  7. 蓝桥杯 倍数问题(dfs,枚举组合数)

    标题:倍数问题 [题目描述]众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数.但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼.现在小葱给了你 n 个数,希望你从这 n 个数 ...

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

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

  9. 蓝桥杯 - 带分数 (DFS)

      历届试题 带分数   时间限制:1.0s   内存限制:256.0MB        问题描写叙述 100 能够表示为带分数的形式:100 = 3 + 69258 / 714. 还能够表示为:10 ...

随机推荐

  1. jqGrid后台交互样例

    schoolManageGrid = $("#jqGrid").jqGrid({ url : ctx.path+"/api/school/querySchools&quo ...

  2. 分布式全文检索引擎之ElasticSearch

    一 什么是 ElasticSearch Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elas ...

  3. 【进阶1-5期】JavaScript深入之4类常见内存泄漏及如何避免(转)

    这是我在公众号(高级前端进阶)看到的文章,现在做笔记 https://mp.weixin.qq.com/s/RZ8Lpkyk8lz6z5H8Q8SiEQ 垃圾回收算法 常用垃圾回收算法叫做**标记清除 ...

  4. 关于KEIL编译报错和警告问题

    编译时候报错.. Library reports error: __use_no_semihosting was requested, but _ttywrch was referenced 上网找了 ...

  5. Android:四大架构的优缺点,你真的了解吗?

    声明|转载于作者:KunMinX原文链接:https://www.jianshu.com/p/9ef813d5c1af 前言 前不久刚结束对 20 模块项目的第 3 轮重构,一路见证 MVC.MVP. ...

  6. SpringMVC环境搭建

    Spring MVC为展现层提供的基于MVC设计理念的优秀Web框架,是目前最主流的MVC框架之一. Spring 3.0之后完全超越Struts2,称为最优秀的MVC框架.学完SpringMVC之后 ...

  7. LeetCode(81): 搜索旋转排序数组 II

    Medium! 题目描述: 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] ). 编写一个函数来判断给 ...

  8. Layers Of Caffe

    本文试图描述构建一个网络结构的layers,可以用prototxt脚本直接写,也可以用python接口实现. 最简单的神经网络包含但不限于以下四部分: 数据层(Data): Data.ImageDat ...

  9. HTML&javaSkcript&CSS&jQuery&ajax-Css

    CSS 1 .eg <head> <style> body{ background-color:#d0e4fe;} h1{ color:orange; text-alin:ce ...

  10. light1370 欧拉函数打表

    /* 给定n个数ai,要求欧拉函数值大于ai的最小的数bi 求sum{bi} */ #include<bits/stdc++.h> using namespace std; #define ...