HNUSTOJ-1674 水果消除(搜索或并查集)
1674: 水果消除
时间限制: 2 Sec 内存限制: 128 MB
提交: 335 解决: 164
[提交][状态][讨论版]
题目描述
“水果消除”是一款手机游戏,相信大家都玩过或玩过类似的游戏。
下面是“水果消除”游戏的一种初始状态。
消除的基本规则:如果有2个或2个以上的相同水果连在一起,则可以点选并消除。
请问在某一种状态下,有几种可以点选并消除的选择方案。
例如,对于上图所示的初始状态,将有6种点选并消除的选择方案。这6种方案依次如下图所示。
输入
先输入一个整数n,表示放水果的格子总数为n*n。n取3到1000之间的整数(含3和1000)。
然后依次输入n*n个表示水果的数据,不同的水果用不同的数字表示,同一种水果用相同的数字表示。
表示水果的数字编号从1开始,不超过100。
输出
在输入数据对应的初始状态下,有几种点选并消除的选择方案。
输出方案数。
样例输入
6 1 1 2 2 2 2 1 3 2 1 1 2 2 2 2 2 2 3 3 2 3 3 1 1 2 2 2 2 3 1 2 3 2 3 2 2
样例输出
6
提示
来源
Derson,2015年湖南科技大学校赛
这道题可以直接DFS求连通块,也可以标号以后并查集;求连通块的时候要注意包含的格子至少为两个计数才加一;
DFS求连通块:
#include<iostream> #include<cstdio> #include<cstring>using namespace std;const int N = 1000 + 50; int mat[N][N]; bool visit[N][N]; int cur; void DFS(int i,int j,int n,int color){if(i<0 || j<0 || i>=n || j>=n) return;if(visit[i][j]) return;if(mat[i][j]!=color) return;visit[i][j] = true;cur++;DFS(i+1,j,n,color);DFS(i-1,j,n,color);DFS(i,j+1,n,color);DFS(i,j-1,n,color); }int DFS_AL(int n){int Count=0;memset(visit ,0,sizeof(visit));for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(!visit[i][j]){cur=0;DFS(i,j,n,mat[i][j]);if(cur>1)Count++;}return Count; }void Input_data(int n){for(int i=0;i<n;i++)for(int j=0;j<n;j++)scanf("%d",&mat[i][j]); }int main(){int n;scanf("%d",&n);Input_data(n);printf("%d\n",DFS_AL(n)); }
并查集:
#include<cstdio> #include<queue>using namespace std;const int MaxSize = 1000+5; struct node1 {int p;int num; }pre[MaxSize*MaxSize];const int dir[4][2]= {{0,1},{0,-1},{1,0},{-1,0}}; short mat[MaxSize][MaxSize]; bool visit[MaxSize][MaxSize]; int Find(int x) {return pre[x].p==x?x:(pre[x].p=Find(pre[x].p)); }void Merge(int x,int y) {x= Find(x),y=Find(y);if(x!=y){pre[y].p=x;pre[x].num += pre[y].num;} } int main() {int n,i,j,k=0,ans,h;scanf("%d",&n);for(i=0; i<n; i++)for(j=0; j<n; j++){scanf("%hd",&mat[i][j]);pre[i*n+j].p=k++;pre[i*n+j].num=1;visit[i][j]=false;}for(i=0; i<n; i++)for(j=0; j<n; j++){if(!visit[i][j]){visit[i][j] = true;for(h=0; h<4; h++)if(i+dir[h][0]>=0 && i+dir[h][0]<n && j+dir[h][1]>=0 && j+dir[h][1]<n )if(mat[i][j] == mat[i+dir[h][0]][j+dir[h][1]])Merge((i*n+j),((i+dir[h][0])*n+j+dir[h][1]));}}for(ans=0,i=0; i<k; i++)if(pre[i].p==i && pre[i].num > 1 )ans++;printf("%d\n",ans); }
//如有错误,还请留言指出
转载于:https://www.cnblogs.com/Pretty9/p/7347723.html
HNUSTOJ-1674 水果消除(搜索或并查集)相关推荐
- 【CodeForces - 616C 】The Labyrinth点石成金(并查集,dfs)
题干: 小O无意间发现了一张藏宝图,它跟随藏宝图的指引来到了一个宫殿,宫殿的地板被分成了n*m块格子,每个格子上放置了金子或者石头 藏宝图告诉小O,它可以选择一块石头变成金子,并且带走与变化后的金子联 ...
- Leetcode一起攻克搜索(BFS,DFS,回溯,并查集)
文章目录 BFS简介 DFS简介 回溯简介 并查集简介 DFS题目 690. 员工的重要性 1.dfs解法: 2.bfs算法 547.朋友圈 dfs解法 200.岛屿数量 dfs解法 417.太平洋大 ...
- [本周总结并查集,搜索]
一.并查集的认识 (1)认识:由名字能认识到,并查集有合并和查找的功能,需要先对数组进行初始化,先自成体系.查找有递归和非递归两种方式.路径压缩的优化,可以将一条链上的各元素都化为该链上代表元素的直属 ...
- 【游戏开发实战】使用Unity制作水果消消乐游戏教程(七):水果消除特效
文章目录 一.前言 二.导入特效素材 三.制作序列帧动画 四.调整序列帧帧率 五.保存特效序列帧预设 六.特效生成器EffectSpawner 七.动画帧事件,监听动画播放完毕 八.调用特效 九.挂脚 ...
- 【浙大软件学院机试】深度优先搜索、并查集和优先级队列知识点(Python实现)
文章目录 1 DFS模板 2 DFS例题-地下迷宫探索(深搜输出路径) 3 并查集 4 优先级队列-Huffman树 1 DFS模板 import math import cmath import s ...
- zoj 3761(并查集+搜索)
题意:在一个平面上,有若干个球,给出球的坐标,每次可以将一个球朝另一个球打过去(只有上下左右),碰到下一个球之后原先的球停下来,然后被撞的球朝这个方向移动,直到有一个球再也撞不到下一个球后,这个球飞出 ...
- 【POJ - 3694】Network(对dfn求lca 或 缩点+lca 或 边双连通+并查集)
题干: 网络管理员管理大型网络.该网络由N台计算机和成对计算机之间的M链路组成.任何一对计算机都通过连续的链接直接或间接连接,因此可以在任何两台计算机之间转换数据.管理员发现某些链接对网络至关重要,因 ...
- 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用
二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...
- 0x41.数据结构进阶 - 并查集
目录 一.路径压缩与按秩合并 1.AcWing 237. 程序自动分析(NOIP2015) 二.边带权并查集 1.AcWing 238. 银河英雄传说(边带权并查集模板) 2.AcWing 239. ...
最新文章
- QluOJ2018NewCode计算几何(寄蒜几盒)
- SQL 语句快速参考
- C语言解释器的实现--存储结构(一)
- vb退出窗体代码_VB中基本概念(3)
- Windows 7安全补丁KB3110329遭遇更新失败 且暂无解决方法
- 用FTP客户端实现主机和虚拟机之间文件的传输(方法1)
- 【Leetcode】【Medium】Rotate Image
- boost::core模块lightweight的测试实例
- 【矩阵乘法】递推(ssl 1532)
- 怎么通过media foundation将图像数据写入虚拟摄像头_千倍成本压缩!特斯拉开发虚拟激光雷达,替代最贵自动驾驶传感器...
- 前端学习(612):js的三种书写位置
- react同步请求_React中setState同步更新策略
- CentOS安装五笔输入法
- hive能替代oracle_Hive与Oracle表关联语句对比
- OpenShift 4 之 GitOps(3)用Helm+ArgoCD部署应用,并保持配置同步
- 初识设计模式之--简单工厂
- 中兴路由器查看时间_中兴路由器的设置方法教程
- 【迅为6818开发板资料】安卓7.1 系统编译手册
- macbook macOS苹果电脑到底需不需要清理系统垃圾?
- js 手机虚拟键盘控制
热门文章
- json解析:[1]gson解析json
- 悟透 JavaScript
- 压缩感知及应用 源代码_【DMD应用】基于压缩感知超分辨鬼成像
- matlab中文文档_Linux下Matlab安装
- CDN网络究竟是怎么加速的?
- 单片机原理,单片机能做什么?
- linux floating ip,Floating IP in OpenStack Neutron
- java别踩白块_java别踩白块(基础功能)
- Opencv中除了cv2.cvtColor彩色图转灰度图之外的其他6种方法
- [CQOI2009]中位数图 详细题解