剪邮票dfs+bfs+组合+结构体
#include<iostream>
#include<queue>
using namespace std;
struct Point
{
int x;
int y;
};
queue<Point>que;
int sum=0;
int a[3][4]={0};//代表取了哪几个数
int visited[13]={0};//用于dfs抽取任意5张数字不同的邮票
int mark[3][4]={0};//用于bfs判断相连的邮票是否被抽取到
int x[4]={-1,0,1,0},y[4]={0,1,0,-1}; //坐标套路,用于4次for循坏进行上下左右
int bfs_mark[3][4]={0};
int h[5]={0};//记录取出的5个邮票
int xx,yy;//记录第一个邮票的位置,方便入栈
int bfs();//前置声明
void dfs(int x)//任意选取5个,且数字从大到小
{
if(x==5) //剪完5个时
{
Point p1; p1.x=xx; p1.y=yy; //保证每次取出5张邮票都能始第一个进行入队判断;
que.push(p1);
int is_connect=bfs();//判断5个是否相连
if(is_connect)
sum++;
return;
}
else
for(int i=0;i<3;i++) //有坐标的题目最好用坐标且记录
for(int j=0;j<4;j++)
if(visited[a[i][j]]==0) //可以取
{
if(x==0) //记录邮票的开端
{
xx=i;yy=j;h[0]=a[i][j];
}
if(a[i][j]>h[x-1]) //保证取出的邮票数值递增
{
h[x]=a[i][j];
visited[a[i][j]]=1;
mark[i][j]=1; //(i,j)处邮票已在5张之中
dfs(x+1);//当一个程序运行报错的时候,很有可能为逻辑思想错误,如dfs(x++),又调用了本身
visited[a[i][j]]=0;
mark[i][j]=0;
h[x]=0;
}
}
}
int bfs()//操作选出的邮票,判断是否相连
{
int i,count=0,a,b;
while(!que.empty())
{
Point p1=que.front(); //每次判断都以队列的头(数字最小的邮票5个的第一个)进行bfs 相当于dfs的起点,dfs(0)
int xx=p1.x;
int yy=p1.y;
que.pop();
count++;
bfs_mark[xx][yy]=1;//已经bfs了 使得已被记录count的数据不被再次bfs,防止二次入队
for(i=0;i<4;i++) //与dfs的for循环类似,这个for循环是bfs的核心,也就是当处于某个点时,它所出现的情况
{
a=p1.x+x[i];
b=p1.y+y[i];
if(a>=0&&a<3&&b>=0&&b<4&&mark[a][b]==1&&bfs_mark[a][b]==0)
{
Point p2;
p2.x=a;
p2.y=b;
bfs_mark[a][b]=1;//无论进队还是出队,只要遍历过,就代表已经bfs了,不能再次
que.push(p2);
}
}
}
for(int i=0;i<3;i++)
for(int j=0;j<4;j++)
bfs_mark[i][j]=0;//reset
if(count==5)
{
for(int i=0;i<5;i++)
cout<<h[i];
if(i=4) cout<<endl;
return 1;
}
else
return 0;
}
int main()
{ int s=0;
for(int i=0;i<3;i++)
for(int j=0;j<4;j++)
a[i][j]=++s;
dfs(0);//剪第一张
cout<<sum;
return 0;
}
剪邮票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枚举 + bfs)
剪邮票 如图1, 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,图2,图3中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少种不同的 ...
- 蓝桥杯 剪邮票 全排列+DFS
剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是 ...
- go结构体组合函数
结构体定义 上面我们说过Go的指针和C的不同,结构体也是一样的.Go是一门删繁就简的语言,一切令人困惑的特性都必须去掉. 简单来讲,Go提供的结构体就是把使用各种数据类型定义的不同变量组合起来的高级数 ...
- 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)
[题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...
- Red and Black(BFS or DFS) 分类: dfs bfs 2015-07-05 22:52 2人阅读 评论(0) 收藏
Description There is a rectangular room, covered with square tiles. Each tile is colored either red ...
- POJ2308连连看dfs+bfs+优化
DFS+BFS+MAP+剪枝 题意: 就是给你一个10*10的连连看状态,然后问你最后能不能全部消没? 思路: 首先要明确这是一个搜索题目,还有就是关键的一点就是连连看这个游戏是 ...
- p/invoke碎片,对结构体的处理
结构体的一些相关知识 可直接转换类类型,比如int类型,在托管代码和非托管代码中占据内存大小 和意义都是一个样的. 结构体封送的关键是:在托管代码和非托管代码中定义的一致性.什么是定义的一致性?包括结 ...
随机推荐
- Panel控件的使用
我们对控件进行分组的原因不外乎三个: 1.为了获得清晰的用户界面而将相关的窗体元素进行可视化分组. 2.编程分组,如对单选按钮进行分组. 3.为了在设计时将多个控件作为一个单元来移动. 在vb.net ...
- linux防火墙之 ufw
Usage: ufw COMMAND Commands: enable enables the firewall 开启ufw防火墙 disable disables the firewall 禁用防火 ...
- Golang文件IO 一
Golang文件IO 一 文件IO编程最基本.最常用的就属读写文件操作了.ioutil包实现了一些IO实用功能,其中就包括非常简捷.好用的文件读取功能. ioutil包有7个函数1个变量: var D ...
- JavaScript实现ZLOGO: 用语法树实现多层循环
原址: https://zhuanlan.zhihu.com/p/32571516 照例先上演示弱效果图. 演示地址照旧: 代码如下: 开始 循环4次 循环4次 前进50 左转90度 到此为止 右转9 ...
- 【原创】重复造轮子之高仿EntityFramework
前言 在上一篇<[原创]打造基于Dapper的数据访问层>中,Dapper在应付多表自由关联.分组查询.匿名查询等应用场景时经常要手动写SQL语句.看着代码里满屏的红色SQL字符串,简直头 ...
- HTTP状态码、请求方法、响应头信息
HTTP状态码 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求.当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应 ...
- 一秒搞定mysql的远程登录
执行下面命令! mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mypw' WITH GRANT OPTION ; ...
- 云计算之路-阿里云上: RDS实例CPU跑满引发的故障
今天上午 10: 40 左右,我们所使用的阿里云 RDS 实例的 CPU 突然飙高到近 100% ,造成大量数据库查询操作缓慢.超时,在这个恶劣条件下大量 memcached 缓存无法建立,这样的雪上 ...
- visual studio相关操作
1.同一个解决方案下的两个项目之间怎么相互调用 在项目的“引用”上右键,添加引用,选你要引用的项目.然后在代码里就能调用引用项目里的某个类的方法了. 2.如果一个项目类型为”类库“的项目要运行,会报如 ...
- Oracle误删数据文件后出现oracle initialization or shutdown in progress解决
一.错误分析 1.首先本人在出现这种情况的背景是执行如下SQL语句后生成的表空间 --自定义表空间 数据表空间 临时表空间 CREATE TEMPORARY TABLESPACE HOUSE_TEMP ...