蓝桥杯 剪邮票 全排列+DFS
剪邮票
如【图1.jpg】, 有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。
请你计算,一共有多少种不同的剪取方法。
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
思路:
刚开始想的是dfs,一天之后才发现不行,因为dfs只能向一个方向搜索,有些状态搜索不到。比如下面的情况
当然BFS也不行。
先选5个数,换算坐标之后判断五个是否相连,队友用的是并查集,我用了dfs,最后结果116
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<string>
#include<cmath>
using namespace std;
struct node {
int x,y;
} ans[5];
int bns[5],sum=0,Map[3][4],cnt,dir[4][2]= {{-1,0},{1,0},{0,-1},{0,1}};
void dfs(node a) {
for(int i=0; i<=3; i++) {
int xx=a.x+dir[i][0],yy=a.y+dir[i][1];
for(int j=0; j<=4; j++) {
if(xx<0||xx>2||yy<0||yy>3)continue;
if(xx==ans[j].x&&yy==ans[j].y&&Map[ans[j].x][ans[j].y]==0) {
cnt++;Map[ans[j].x][ans[j].y]=1;
if(cnt==5)return;
else {
node temp=ans[j];dfs(temp);
}
}
}
}
}
void check() {
sort(bns,bns+5);memset(Map,0,sizeof(Map));cnt=1;
for(int i=0; i<=4; i++) {
ans[i].x=bns[i]/4;ans[i].y=bns[i]%4;
}
Map[ans[0].x][ans[0].y]=1;
node temp=ans[0];
dfs(temp);
if(cnt==5)sum++;
}
int main() {
for(int i=0; i<=7; i++)
for(int j=i+1; j<=8; j++)
for(int k=j+1; k<=9; k++)
for(int p=k+1; p<=10; p++)
for(int q=p+1; q<=11; q++) {
bns[0]=i;bns[1]=j;bns[2]=k;bns[3]=p;bns[4]=q;
check();
}
printf("%d",sum);
return 0;
}
蓝桥杯 剪邮票 全排列+DFS的更多相关文章
- 蓝桥杯 剪邮票(dfs枚举 + bfs)
剪邮票 如图1, 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,图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&BFS)(小总结)
问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+ ...
- 蓝桥杯---数独(模拟 || dfs)
[编程题](满分33分) "数独"是当下炙手可热的智力游戏.一般认为它的起源是"拉丁方块",是大数 学家欧拉于1783年发明的. 如图[1.jpg]所示:6x6 ...
- java实现第四届蓝桥杯剪格子
剪格子 题目描述 如图p1.jpg所示,3 x 3 的格子中填写了一些整数. 我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是60. 本题的要求就是请你编程判定:对给定的m x n 的格子 ...
- DFS+BFS(广度优先搜索弥补深度优先搜索遍历漏洞求合格条件总数)--09--DFS+BFS--蓝桥杯剪邮票
题目描述 如下图, 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连) 比如,下面两张图中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少 ...
- 蓝桥杯 方格填数 DFS 全排列 next_permutation用法
如下的10个格子(参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数.注意:你提交的应该是一个 ...
随机推荐
- 算法改进 | java语言中判断素数
参考文章:http://blog.csdn.net/kp_liu/article/details/37569507 http://blog.csdn.net/huang_miao_xin/articl ...
- C++中的endl
从开始接触C++到现在,一直以为语句 cout << "hello world!" << endl; 中的endl只是一个相当于C中的换行'\n':直到今天 ...
- HTML5网站大观:15个精美的 HTML5 单页网站作品欣赏
HTML5 是现在Web开发领域的热点,更多的开发人员开始使用HTML5来开发交互性强.效果出众的Web应用和游戏.今天,本文收集了15个精美的 HTML5 单页网站作品,让大家感受一下 HTML5 ...
- 最新版multer1.3.0上传文件
完整项目资源下载路径:http://download.csdn.net/detail/qq_28506819/9851744 使用方法: cd到跟目录,然后npm install. 运行项目,npm ...
- AJAX中使用post,get接收发送数据的区别
如何发起请求 xhr.send(); 备注: 如果是get方式,send()命令中不用写任何参数 传递的数据可以写在url中,服务器用$_GEET["参数名"]接收 如果是post ...
- 2017 多校训练 1002 Balala Power!
Balala Power! Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- CREATE DATABASE RoomReservation
要从我的模型开始构建我的RoomReservation数据库对象,我将创建表对象. 要在SQL Server中创建表,我需要使用CREATE TABLE语句. 使用CREATE TABLE语句,我将能 ...
- CSS预处理器——Sass、LESS和Stylus实践【未删减版】
http://www.w3cplus.com/css/css-preprocessor-sass-vs-less-stylus-2.html
- Python基础-注释-变量赋值
一.注释 # 注释 \n 行分隔符 \ 继续上一行 ''' *** ''' 多行注释 二.基本规则 : 分开代码块(组) 头$尾 缩进块 语句代码块 用缩进深度区分 空行 用于分割 ...
- 使用TP5创建一个REST API
原文在这里 : http://hmw.iteye.com/blog/1190827 tp自带的api,get请求接口 /** * 显示资源列表 * * @return \think\Response ...