蓝桥 剪邮票 (dfs+bfs)
来源:互联网 发布:欧洲旅游机票软件 编辑:程序博客网 时间:2024/06/05 00:49
思路来自http://blog.csdn.net/xunalove/article/details/68935661
如【图1.jpg】, 有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。
请你计算,一共有多少种不同的剪取方法。
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
先深搜出点,转成2维地图形式,然后广搜判断点是否是相连的
#include<iostream>#include<cmath>#include<string.h>#include<queue>#include<algorithm>using namespace std;int a[12],v[12]={0},cnt=0;int dir[4][2]={-1,0,0,-1,0,1,1,0};struct st{int x;int y;}s;queue<struct st> Q;int bfs(){int map[3][4]={0},x,y,i,j,k=0,xx,yy;for (i=0; i<12; i++)//map为1是选择的点,为0 不是{if (a[i] != -1){x = a[i]/4; y = a[i]%4;map[x][y] = 1;}}//搜索相邻的s.x = x;s.y = y;map[s.x][s.y] = 0;Q.push(s);while (!Q.empty()){s = Q.front();Q.pop();for (i=0; i<4; i++){xx = dir[i][0]+s.x;yy = dir[i][1]+s.y;if (xx>=0&&yy>=0&&xx<3&&yy<4&&map[xx][yy]!=0){k++;struct st temp;temp.x = xx;temp.y = yy;map[xx][yy] = 0;Q.push(temp);}}}if (k >= 4){return 1;}return 0;}void dfs(int x,int y){int i,j;if (x == 5){if (bfs()){cnt++;}return ;}for (i=y; i<12; i++){if (!v[i]){v[i] = 1;a[x] = i;dfs(x+1,i);a[i] = -1;v[i] = 0;}}}int main(){memset(a,-1,sizeof(a));dfs(0,0);cout<<cnt;}
0 0
- 蓝桥 剪邮票 (dfs+bfs)
- 蓝桥 剪邮票
- 2016蓝桥 剪邮票
- 蓝桥2016省赛 剪邮票
- 2016 第七届 蓝桥杯第7题 剪邮票(bfs+dfs)
- 2016第七届蓝桥杯--剪邮票(DFS)
- 蓝桥杯 剪邮票(暴搜dfs)
- 蓝桥杯 剪邮票DFS
- 蓝桥 卡片换位(bfs)
- 2016蓝桥杯省赛C/C++B组7题剪邮票 DFS枚举组合情况BFS判联通
- 蓝桥杯 剪邮票 全排列+DFS
- 蓝桥杯---剪邮票---DFS的适用范围
- 邮票分你一半(dfs)
- 2016蓝桥杯C/C++省赛 剪邮票(深搜DFS+暴力)
- uva10004(bfs||dfs)
- bfs+dfs(poj3083)
- zoj3736(bfs&&dfs)
- poj1426(bfs dfs)
- iOS笔记—对象的结构体属性单个修改方式
- 算法训练 字串统计
- Swoole 关于reload重启与回调函数中代码的重载
- Catalan数
- KMP算法的实现(Java语言描述)
- 蓝桥 剪邮票 (dfs+bfs)
- NoHttp的GET 和POST
- Swagger+Spring mvc生成Restful接口文档
- 黑客编程基础
- leetcode 344. Reverse String
- Oracle 删除用户和表空间
- PAT A1018. Public Bike Management
- 利用栈实现算术表达式求值(Java语言描述)
- Lucene全文搜索查询string时间类型