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的油田(使用查并集)相关推荐

  1. 1099: PIPI的油田

    题目描述 PIPI承包了一大片土地,PIPI打了几个油井,发现这片土地的下面有很多地方埋藏着石油,如果一个油井与另一个油井在上,下,左,右,左上,右下,右上,左下这八个方向中的任意一个方向连通,我们就 ...

  2. [kuangbin带你飞]专题五查并集

    写了几个查并集得题,成功把自己写晕了 之后写下面得题(写不下去了) **poj-2912 poj 文章目录 1.POJ - 1611(模板题) 2.HDU - 1213(模板题) 3.poj2236( ...

  3. 查并集(朋友圈问题)

    假设有A,B,C,D,E,5个人A,B在一个朋友圈内,B,C在一个朋友圈内,这样A,B,C就在一个朋友圈内,总共有多少个朋友圈. 当人数较多时不容易算出. 可以利用数据结构查并集. 设5个人的初值为- ...

  4. 765. 情侣牵手 查并集

    N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起. 一次交换可选择任意两人,让他们站起来交换座位. 人和座位用 0 到 2N-1 的整 ...

  5. 历届试题 合根植物(查并集,模板+优化)

    历届试题 合根植物 http://lx.lanqiao.cn/problem.page?gpid=T458 时间限制:2.0s 内存限制:256.0MB 问题描述 w星球的一个种植园,被分成 m * ...

  6. 习题整理(简单01背包 可用查并集2022/4/24)

    习题整理 提示:之前的习题在习题集合 文章目录 习题整理 一.诱人的宝藏 1.思路 2.代码 二.晚宴 1.思路 2.代码 三.医师之路 1.思路 2.扩展知识 3.代码 总结 提示:以下是本篇文章正 ...

  7. 牛客IOI周赛22-普及组 路线规划 查并集

    路线规划 戳我找原题 成为热门手记人偶的薇尔莉特伊芙嘉登最近收到了非常多的委托,这些委托者分散在世界的各地,各个国家都有.但正值战争的尾声,穿行于各个国家之间是非常危险的,一路上会有许多的敌人,这些敌 ...

  8. sql查询两张表的并集union和union all

    使用 union all 和 union 1.新建两张表:student.teacher //学生表 create table student( id int primary key, name va ...

  9. 成功解决Address localhost:1099 is already in use(如何结束进程)

    ctrl+shift+esc(打开任务管理器的快捷键) 上面的PID不叫进程号 PID叫做端口ID,一个端口下有多个进程,进程之间就有可能发送冲突. 第二种方法使用命令 netstat -ano | ...

  10. POJ-2524 Ubiquitous Religions(无处不在的宗教)解题报告(并查集)

    目录 题目描述 思路分析 今天没有考试,那就再刷点题吧(难道就不怕c语言挂科吗?).因为昨天写了道并查集,所以今天再来一道,还是有所收获的. 题目描述 题目:https://vjudge.net/pr ...

最新文章

  1. 我们该怎么成为技术尖子生
  2. 通过企业分布式缓存共享运行时数据
  3. Linux系统设置定时任务 1
  4. 南瑞变压器保护装置说明书_电力试验:变压器感应耐压试验(二)
  5. SAP Fiori Elements - fragment load roundtrip
  6. jmeter生成html报告修改,Jmeter生成html报告(示例代码)
  7. HTTP Cookie详解
  8. matlab中solver函数_Simulink求解器(Solver)相关知识
  9. 大前端的自动化工厂(2)—— SB Family
  10. 全面支持3.0 新华三“力夯”可信计算发展
  11. iOS-----线程同步与线程通信
  12. 花了半个多小时,纯手点,为500多人点赞
  13. 车辆维修管理系统mysql_数据库课设计 汽车修理管理系统.doc
  14. mysql建表语句注释_MySQL建表语句+添加注释
  15. 现在很迷茫,完全不知道自己能干什么
  16. react.createContext
  17. rdt(可靠运输协议)理解
  18. UG/NX 装配克隆
  19. Java中的实体类(VO、PO、DO、DTO、BO、QO、DAO、POJO)
  20. 13. Linux权限管理命令

热门文章

  1. 一键让网页变黑白色调
  2. 百度地图保存图片_如何获得可编辑的专题分析地图底图?
  3. 神来之笔之傅里叶变换(Fourier Tranformation)
  4. [渝粤教育] 中国地质大学 计算机会计理论与实务 复习题
  5. C#之浅析面向对象编程思想(二)
  6. 交换游戏(状态压缩、记忆化搜索)
  7. 游戏策划笔记:交互分析
  8. 灵州会盟及民族友好历史传统研讨会在吴忠召开
  9. python查看微信撤回消息怎么弄_Python | 查看微信撤回的消息(完整代码)
  10. DITHER抖动算法