1099 PIPI的油田(使用查并集)
1099 PIPI的油田
描述: PIPI承包了一大片土地,PIPI打了几个油井,发现这片土地的下面有很多地方埋藏着石油,如果一个油井与另一个油井在上,下,左,右,左上,右下,右上,左下这八个方向中的任意一个方向连通,我们就认为这两个油井属于同一个油田。
现在这块土地可以看成是一个n*m的方格矩阵,标记为’@‘的方格代表一个油井,标记为’*'的方格代表一块贫瘠的土地。你能告诉PIPI他的这块土地上有几个油田吗?输入:输入包含多组测试样例。
对于每组测试样例,输入的第一行是两个正整数 n,m (1<=n,m<=100)
接下来输入的一个n*m的方格矩阵,代表PIPI承包土地。
以 0 0结尾结束输入。输出:对于每组测试样例,输出一行,代表土地上油田的数目。
输入示例
1 1 * 3 5 *@*@* **@** *@*@* 1 8 @@****@* 5 5 ****@ *@@*@ *@**@ @@@*@ @@**@ 0 0
输出示例
0 1 2 2
代码块
#include <bits/stdc++.h> using namespace std;const int N = 100;int f[N*N];//并查集 int getFather(int x){// if(x == f[x]) return x;// else{// f[x] = GetFather(f[x]);//父节点设为根节点// return f[x];//返回父节点// }return x==f[x]?x:f[x]=getFather(f[x]);//路径压缩 }int dx[] = {1, 1, 1, -1, -1, -1, 0, 0}; int dy[] = {0, -1, 1, 0, 1, -1, 1, -1};//方向数组char mp[N][N];//地图 int main(){int i, j, n, m;while(~scanf(" %d %d", &n, &m)){if(n == 0 && m == 0) break;int cnt = n*m;for(i=0; i<n; i++){scanf("%s", mp[i]);}for(i=0; i<cnt; i++) f[i] = i;//初始化for(i=0; i<n; i++){for(j=0; j<m; j++){if(mp[i][j] == '*'){cnt--;//土地直接让连同分量减一}else{for(int k=0; k<8; k++){int nx = i+dx[k];//新的横坐标int ny = j+dy[k];if(nx>=0 && nx<n && ny>=0 && ny<m && mp[nx][ny] == '@'){int fx = getFather(i*m+j);int fy = getFather(nx*m+ny);if(fx != fy){cnt--;f[fx] = fy;//合并}}}}}}printf("%d\n", cnt);} }
1099 PIPI的油田(使用查并集)相关推荐
- 1099: PIPI的油田
题目描述 PIPI承包了一大片土地,PIPI打了几个油井,发现这片土地的下面有很多地方埋藏着石油,如果一个油井与另一个油井在上,下,左,右,左上,右下,右上,左下这八个方向中的任意一个方向连通,我们就 ...
- [kuangbin带你飞]专题五查并集
写了几个查并集得题,成功把自己写晕了 之后写下面得题(写不下去了) **poj-2912 poj 文章目录 1.POJ - 1611(模板题) 2.HDU - 1213(模板题) 3.poj2236( ...
- 查并集(朋友圈问题)
假设有A,B,C,D,E,5个人A,B在一个朋友圈内,B,C在一个朋友圈内,这样A,B,C就在一个朋友圈内,总共有多少个朋友圈. 当人数较多时不容易算出. 可以利用数据结构查并集. 设5个人的初值为- ...
- 765. 情侣牵手 查并集
N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. 一次交换可选择任意两人,让他们站起来交换座位. 人和座位用 0 到 2N-1 的整 ...
- 历届试题 合根植物(查并集,模板+优化)
历届试题 合根植物 http://lx.lanqiao.cn/problem.page?gpid=T458 时间限制:2.0s 内存限制:256.0MB 问题描述 w星球的一个种植园,被分成 m * ...
- 习题整理(简单01背包 可用查并集2022/4/24)
习题整理 提示:之前的习题在习题集合 文章目录 习题整理 一.诱人的宝藏 1.思路 2.代码 二.晚宴 1.思路 2.代码 三.医师之路 1.思路 2.扩展知识 3.代码 总结 提示:以下是本篇文章正 ...
- 牛客IOI周赛22-普及组 路线规划 查并集
路线规划 戳我找原题 成为热门手记人偶的薇尔莉特伊芙嘉登最近收到了非常多的委托,这些委托者分散在世界的各地,各个国家都有.但正值战争的尾声,穿行于各个国家之间是非常危险的,一路上会有许多的敌人,这些敌 ...
- sql查询两张表的并集union和union all
使用 union all 和 union 1.新建两张表:student.teacher //学生表 create table student( id int primary key, name va ...
- 成功解决Address localhost:1099 is already in use(如何结束进程)
ctrl+shift+esc(打开任务管理器的快捷键) 上面的PID不叫进程号 PID叫做端口ID,一个端口下有多个进程,进程之间就有可能发送冲突. 第二种方法使用命令 netstat -ano | ...
- POJ-2524 Ubiquitous Religions(无处不在的宗教)解题报告(并查集)
目录 题目描述 思路分析 今天没有考试,那就再刷点题吧(难道就不怕c语言挂科吗?).因为昨天写了道并查集,所以今天再来一道,还是有所收获的. 题目描述 题目:https://vjudge.net/pr ...
最新文章
- 我们该怎么成为技术尖子生
- 通过企业分布式缓存共享运行时数据
- Linux系统设置定时任务 1
- 南瑞变压器保护装置说明书_电力试验:变压器感应耐压试验(二)
- SAP Fiori Elements - fragment load roundtrip
- jmeter生成html报告修改,Jmeter生成html报告(示例代码)
- HTTP Cookie详解
- matlab中solver函数_Simulink求解器(Solver)相关知识
- 大前端的自动化工厂(2)—— SB Family
- 全面支持3.0 新华三“力夯”可信计算发展
- iOS-----线程同步与线程通信
- 花了半个多小时,纯手点,为500多人点赞
- 车辆维修管理系统mysql_数据库课设计 汽车修理管理系统.doc
- mysql建表语句注释_MySQL建表语句+添加注释
- 现在很迷茫,完全不知道自己能干什么
- react.createContext
- rdt(可靠运输协议)理解
- UG/NX 装配克隆
- Java中的实体类(VO、PO、DO、DTO、BO、QO、DAO、POJO)
- 13. Linux权限管理命令