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 水果消除(搜索或并查集)相关推荐

  1. 【CodeForces - 616C 】The Labyrinth点石成金(并查集,dfs)

    题干: 小O无意间发现了一张藏宝图,它跟随藏宝图的指引来到了一个宫殿,宫殿的地板被分成了n*m块格子,每个格子上放置了金子或者石头 藏宝图告诉小O,它可以选择一块石头变成金子,并且带走与变化后的金子联 ...

  2. Leetcode一起攻克搜索(BFS,DFS,回溯,并查集)

    文章目录 BFS简介 DFS简介 回溯简介 并查集简介 DFS题目 690. 员工的重要性 1.dfs解法: 2.bfs算法 547.朋友圈 dfs解法 200.岛屿数量 dfs解法 417.太平洋大 ...

  3. [本周总结并查集,搜索]

    一.并查集的认识 (1)认识:由名字能认识到,并查集有合并和查找的功能,需要先对数组进行初始化,先自成体系.查找有递归和非递归两种方式.路径压缩的优化,可以将一条链上的各元素都化为该链上代表元素的直属 ...

  4. 【游戏开发实战】使用Unity制作水果消消乐游戏教程(七):水果消除特效

    文章目录 一.前言 二.导入特效素材 三.制作序列帧动画 四.调整序列帧帧率 五.保存特效序列帧预设 六.特效生成器EffectSpawner 七.动画帧事件,监听动画播放完毕 八.调用特效 九.挂脚 ...

  5. 【浙大软件学院机试】深度优先搜索、并查集和优先级队列知识点(Python实现)

    文章目录 1 DFS模板 2 DFS例题-地下迷宫探索(深搜输出路径) 3 并查集 4 优先级队列-Huffman树 1 DFS模板 import math import cmath import s ...

  6. zoj 3761(并查集+搜索)

    题意:在一个平面上,有若干个球,给出球的坐标,每次可以将一个球朝另一个球打过去(只有上下左右),碰到下一个球之后原先的球停下来,然后被撞的球朝这个方向移动,直到有一个球再也撞不到下一个球后,这个球飞出 ...

  7. 【POJ - 3694】Network(对dfn求lca 或 缩点+lca 或 边双连通+并查集)

    题干: 网络管理员管理大型网络.该网络由N台计算机和成对计算机之间的M链路组成.任何一对计算机都通过连续的链接直接或间接连接,因此可以在任何两台计算机之间转换数据.管理员发现某些链接对网络至关重要,因 ...

  8. 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用

    二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...

  9. 0x41.数据结构进阶 - 并查集

    目录 一.路径压缩与按秩合并 1.AcWing 237. 程序自动分析(NOIP2015) 二.边带权并查集 1.AcWing 238. 银河英雄传说(边带权并查集模板) 2.AcWing 239. ...

最新文章

  1. QluOJ2018NewCode计算几何(寄蒜几盒)
  2. SQL 语句快速参考
  3. C语言解释器的实现--存储结构(一)
  4. vb退出窗体代码_VB中基本概念(3)
  5. Windows 7安全补丁KB3110329遭遇更新失败 且暂无解决方法
  6. 用FTP客户端实现主机和虚拟机之间文件的传输(方法1)
  7. 【Leetcode】【Medium】Rotate Image
  8. boost::core模块lightweight的测试实例
  9. 【矩阵乘法】递推(ssl 1532)
  10. 怎么通过media foundation将图像数据写入虚拟摄像头_千倍成本压缩!特斯拉开发虚拟激光雷达,替代最贵自动驾驶传感器...
  11. 前端学习(612):js的三种书写位置
  12. react同步请求_React中setState同步更新策略
  13. CentOS安装五笔输入法
  14. hive能替代oracle_Hive与Oracle表关联语句对比
  15. OpenShift 4 之 GitOps(3)用Helm+ArgoCD部署应用,并保持配置同步
  16. 初识设计模式之--简单工厂
  17. 中兴路由器查看时间_中兴路由器的设置方法教程
  18. 【迅为6818开发板资料】安卓7.1 系统编译手册
  19. macbook macOS苹果电脑到底需不需要清理系统垃圾?
  20. js 手机虚拟键盘控制

热门文章

  1. json解析:[1]gson解析json
  2. 悟透 JavaScript
  3. 压缩感知及应用 源代码_【DMD应用】基于压缩感知超分辨鬼成像
  4. matlab中文文档_Linux下Matlab安装
  5. CDN网络究竟是怎么加速的?
  6. 单片机原理,单片机能做什么?
  7. linux floating ip,Floating IP in OpenStack Neutron
  8. java别踩白块_java别踩白块(基础功能)
  9. Opencv中除了cv2.cvtColor彩色图转灰度图之外的其他6种方法
  10. [CQOI2009]中位数图 详细题解