剪邮票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类型,在托管代码和非托管代码中占据内存大小 和意义都是一个样的. 结构体封送的关键是:在托管代码和非托管代码中定义的一致性.什么是定义的一致性?包括结 ...
随机推荐
- 【Linux】Linux学习笔记(完结)
前言 在工作中发现Linux系统的重要性,于是计划重温下Linux,顺便记录笔记方便之后查阅. 磁盘分区 在Linux系统中,每个设备都被当成一个文件来对待:如IDE接口的硬盘文件名为/dev/hd[ ...
- ArcGIS API for JavaScript 4.2学习笔记[17] 官方第七章Searching(空间查询)概览与解释
空间分析和空间查询是WebGIS有别于其他Web平台的特点.到这一章,就开始步入空间分析的内容了. [Search widget] 介绍空间查询的核心小部件"Search". [S ...
- iView的使用【CDN向】
直接粗暴地上html代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- web网站嵌入QQ临时会话代码 ----转载----小技巧
第一种 <img style="CURSOR: pointer" onclick="javascript:window.open('tencent://messag ...
- lesson - 9 Linux系统软件包管理
1. rpm工具rpm Redhat Package Manager, 设计理念是开放的,不仅仅是在RedHat平台上,在SUSE上也是可以使用的. rpm包名字构成由-和.分成了若干部分,如abrt ...
- Jmeter+Ant+Jenkins接口自动化测试(二)_测试方案设计及jmeter脚本开发
前言 根据之前部署好的测试环境,进行接口自动化测试的方案设计及Jmeter脚本开发.测试方案设计过程中采用了数据分离和对象分离等思路,因此直接通过特定的测试用例文档来驱动整个自动化接口测试的执行,相关 ...
- centOS7 mini配置linux服务器(五) 安装和配置tomcat和mysql
配置java运行环境,少不了服务器这一块,而tomcat在服务器中占据了很大一部分份额,这里就简单记录下tomcat安装步骤. 下载 首先需要下载tomcat7的安装文件,地址如下: http://t ...
- Spring Dynamic DataSource Routing
Use AbstractRoutingDataSource to dynamicly switch datasources, see http://spring.io/blog/2007/01/23/ ...
- Java自己动手写连接池二
读取数据库文件,来操作: package com.kama.cn; import java.sql.Connection;import java.sql.DriverManager;import ja ...
- Rstudio( bioconductor)下载太慢,用国内镜像
在Rstudio中,下载软件install.packages()和 bioconductor软件下载命令 source("http://bioconductor.org/biocLite.R ...