蓝桥杯 剪邮票(dfs枚举 + bfs)
剪邮票
如图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)的更多相关文章
- 蓝桥杯 剪邮票 DFS (不错的题目)
剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是合格的 ...
- 蓝桥杯---剪格子(DFS&BFS)(小总结)
问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+ ...
- 蓝桥杯 剪邮票 全排列+DFS
剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是 ...
- java实现第七届蓝桥杯剪邮票
剪邮票 题目描述 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所 ...
- 蓝桥杯——剪邮票(2016JavaB组第10题)
剪邮票(16JavaB10) 如[图1], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2],[图3]中,粉红色所示部分就是合 ...
- 蓝桥杯剪格子dfs
#include<iostream> #include<cstring> #include<iomanip> #include<cmath> #incl ...
- 蓝桥杯 倍数问题(dfs,枚举组合数)
标题:倍数问题 [题目描述]众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数.但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼.现在小葱给了你 n 个数,希望你从这 n 个数 ...
- java实现第四届蓝桥杯剪格子
剪格子 题目描述 如图p1.jpg所示,3 x 3 的格子中填写了一些整数. 我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是60. 本题的要求就是请你编程判定:对给定的m x n 的格子 ...
- 蓝桥杯 - 带分数 (DFS)
历届试题 带分数 时间限制:1.0s 内存限制:256.0MB 问题描写叙述 100 能够表示为带分数的形式:100 = 3 + 69258 / 714. 还能够表示为:10 ...
随机推荐
- elasticsearch6.3.1 安装以及配置IK 使用
https://blog.csdn.net/whb3299065/article/details/80104323
- js---数组排序法(冒泡排序;快速排序)
1.冒泡排序 原理:将数组的相邻两个元素进行比较,大的就往后移,小的往前,依次比较并且进行递减迭代. var arr =[54,36,89,1,3,5,2]; function sortArr(arr ...
- 分享几个Android很强势的的开源框架
前言 今天介绍一下android开发者中比较热门的开源代码,这些代码绝大多数可以直接应用到项目中.更多可参考很值得收藏的安卓开源控件库 一个强大的图片选择器,支持多选,和选聘选择 项目地址: http ...
- vue阿里上传图片报400错误
首先我用vue上传阿里图片用的是分片上传,分片上传由于一片是以100kb为起始的,所以当图片大小小于100kb的时候不分片,可以正常上传,当大于100kb的时候,会报400错误如下 One or mo ...
- 【python】mongo删除数据
参考:https://stackoverflow.com/questions/23334743/setting-justone-limiter-for-pymongo-remove-throws-ty ...
- Redis扩展
Redis扩展下载地址:https://windows.php.net/downloads/pecl/releases/redis/ PHP怎么安装redis扩展 http://www.php.cn/ ...
- Niagara 泵阀
1.泵阀系统 2.Niagara 每次在启动workbench的时候安装一下daemon,后启动platform 启动station的时候,当station的status变成Running之后启动
- django----利用Form 实现两次密码输入是否一样 ( 局部钩子和全局钩子 )
from django import forms # 导入表单模块 from django.core.exceptions import ValidationError class RegisterF ...
- poj3107树的重心
/*树的重心求法:两次dfs,第一次dfs处理出每个结点的size,以此求每个结点大儿子的size,第二次dfs将每个结点大儿子的size和余下结点数进行比较,所有结点里两个值之间差值最小的那个点就是 ...
- 流媒体服务器SRS部署
github地址:https://github.com/ossrs/srs 1,srs下载 http://ossrs.net/srs.release/releases/index.html 选择正式发 ...