剪邮票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类型,在托管代码和非托管代码中占据内存大小 和意义都是一个样的. 结构体封送的关键是:在托管代码和非托管代码中定义的一致性.什么是定义的一致性?包括结 ...
随机推荐
- C++ 头文件系列(stdexcept)
预定义异常类 这个头文件包含的内容非常简单,只包含9个异常类,均从exception类派生,因此我们用三张图来描述: 这里仅解释两点: overflow : 指值的大小超过 整型 变量能表示的范围,即 ...
- 虚拟机创建流程中neutron代码分析(三)
前言: 当neutron-server创建了port信息,将port信息写入数据库中.流程返回到nova服务端,接着nova创建的流程继续走.在计算节点中neutron-agent同样要完成很多的工作 ...
- centos 7 部署 汉化版 gitlab
=============================================== 2017/11/12_第6次修改 ccb_warlock 更 ...
- Linux下磁盘监控及系统版本-CPU-内存等查看
1.磁盘IO监控工具 iotop 输入命令:iotop 主要查看程序使用的磁盘IO的信息 安装:yum -y install iotop 第一行:10:01:23 — 当前系统时间126 days ...
- kafka 消费
前置资料 kafka kafka消费中的问题及解决方法: 情况1: 问题:脚本读取kafka 数据,写入到数据库,有时候出现MySQL server has gone away,导致脚本死掉.再次启 ...
- Python第二十四天 binascii模块
Python第二十四天 binascii模块 binascii用来进行进制和字符串之间的转换 import binascii s = 'abcde' h = binascii.b2a_hex(s) # ...
- JavaScript的DOM编程--09--节点的替换
节点的替换: 1). replaceChild(): 把一个给定父元素里的一个子节点替换为另外一个子节点 var reference = element.replaceChild(newChild,o ...
- 房上的猫:了解java与学习java前的准备
一.java 概述: 1.通常指完成某些事情的一种既定方式和过程 2.程序可以看做对一系列动作执行过程的描述 3.计算机按照某种顺序完成一系列指令的集合称为程序 4.计算机仅识别二进制低级语言 ...
- Qt创建停靠悬浮窗口
1.Qt实现窗口停靠和悬浮使用类QDockWidget,它有两个重要方法用来设置停靠特性以及停靠区域, dw1->setFeatures(QDockWidget::DockWidgetMovab ...
- fiddler基本介绍
1.Fiddler如何捕获HTTPS会话 点击Tools->Teleik Fiddler Option,勾选如下选项 点击"Yes" 后,就设置好了 2.fiddler的基本 ...