题目链接



求划分区域的个数,也就是求连通分量的个数,将每个单元格划分为4个部分,分别根据空格、斜杠、反斜杠进行合并。


单元格之间也要合并,上下、左右各选一个方向即可。

class UnionFind{public:UnionFind(int n): count(n), parent(n), size(n, 1) {iota(parent.begin(), parent.end(), 0);}int find(int x) {return x == parent[x] ? x : find(parent[x]);}bool unite(int x, int y) {x = find(x);y = find(y);if (x == y) {return false;}if (size[x] < size[y]) {swap(x, y);}parent[y] = x;size[x] += size[y];--count; return true;}public:int count;vector<int> parent;vector<int> size;
};class Solution {public:int regionsBySlashes(vector<string>& grid) {int n = grid.size();UnionFind uf(4 * n * n);for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {int idx = (i * n + j) * 4;if (grid[i][j] == ' ') { // 0 1 2 3uf.unite(idx, idx+1);uf.unite(idx+1, idx+2);uf.unite(idx+2, idx+3);}else if (grid[i][j] == '/') { // 1 2 ; 0 3uf.unite(idx, idx+3);uf.unite(idx+1, idx+2);}else { // 0 1 ; 2 3uf.unite(idx, idx+1);uf.unite(idx+2, idx+3);}if (j + 1 < n) {uf.unite(idx+1, idx+7);}if (i + 1 < n) {uf.unite(idx+2, idx+n*4);}}}return uf.count;}
};

并查集 - 由斜杠划分区域相关推荐

  1. 【每日一题】 959. 由斜杠划分区域

    [每日一题] 959. 由斜杠划分区域 避免每日太过咸鱼,一天搞定一道LeetCode算法题 一.题目描述 在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /. ...

  2. 959. 由斜杠划分区域

    链接:959. 由斜杠划分区域 题解: 为了解决本题,我们把 一个格子 划分成 4 个区域.如果是 左划线 "/",即对应了下图的 0️⃣ 和 ③ 连通.① 和 ② 连通:如果是 ...

  3. leetcode 959. 由斜杠划分区域(并查集)

    在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /.\ 或空格构成.这些字符会将方块划分为一些共边的区域. (请注意,反斜杠字符是转义的,因此 \ 用 &quo ...

  4. 每日一题:leetcode959.由斜杠划分区域

    题目描述 题目分析 仔细分析这道题以后虽然觉得可能要转化为图之类的,但是完全没有具体的想法,因为每个格子都有三种情况,这三种情况的不同的组合又会产生不同的结果. 发现找不到编码转化为图以后,我分析了一 ...

  5. leetcode —— 959. 由斜杠划分区域

    在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /.\ 或空格构成.这些字符会将方块划分为一些共边的区域. (请注意,反斜杠字符是转义的,因此 \ 用 &quo ...

  6. LeetCode 1697. 检查边长度限制的路径是否存在(排序+并查集)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个 n 个点组成的无向图边集 edgeList ,其中 edgeList[i] = [ui, vi, disi] 表示点 ui 和点 vi 之间有一 ...

  7. LeetCode 685. 冗余连接 II(并查集)

    1. 题目 在本问题中,有根树指满足以下条件的有向图.该树只有一个根节点,所有其他节点都是该根节点的后继. 每一个节点只有一个父节点,除了根节点没有父节点. 输入一个有向图,该图由一个有着N个节点 ( ...

  8. LeetCode 886. 可能的二分法(着色DFS/BFS/拓展并查集)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 2.3 并查集 1. 题目 给定一组 N 人(编号为 1, 2, -, N), 我们想把每个人分进任意大小的两组. 每个人都可能不喜欢 ...

  9. LeetCode 684. 冗余连接(并查集)

    1. 题目 在本问题中, 树指的是一个连通且无环的无向图. 输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, -, N) 的树及一条附加的边构成.附加的边的两个顶点包含在1到N中间,这条附 ...

最新文章

  1. Java8 新的 try-with-resources 语句,自动资源释放
  2. 【记录一个问题】cuda核函数可能存在栈溢出,导致main()函数退出后程序卡死30秒CUDA...
  3. ionic3学习之Android平台打包方式
  4. Linux基础之文件管理三兄弟(cp、mv、rm)
  5. SAP附件清单的调用
  6. 请先设置tkk_物联卡apn设置机型大全!!物联卡连不上4G、网速慢?推荐你看这片文...
  7. 机械秒表的使用方法_让console.log()不再是你的唯一选项js日志输出6种方法
  8. Ubuntu 16.04中的Dock的应用顺序调整
  9. 利用python构建信用卡评分
  10. JQ ajax 请求事件处理
  11. C# LeetCode刷题 - LeetCode 148. Sort List 解题报告(归并排序小结)
  12. 京东云安装docker
  13. gfortran在linux下安装
  14. 慎投:这两本期刊被剔除SCI/SSCI, 11月WOS数据库已更新~
  15. Vue3和码上掘金实现猜数字小游戏
  16. SaaS云服务应用的访问安全性分析
  17. Markdown mermaid种草(9)_ 用户体验地图
  18. 百度地图离线化(API v=1.3)
  19. 计算机网络中常用设备处于脱机状态,win7网络正常网页提示处于脱机状态该怎么解决?...
  20. 程序员最爱 Mac、JS 是最热门技术

热门文章

  1. 合并排序(Java)-解析
  2. [c#]Dll自定义目录
  3. 分位数(quantiles)、Z-score 与 F-score
  4. 关于ALTERA的FPGA的弱上拉问题
  5. Windows Phone中Wallet钱包的使用
  6. Day11多态部分-2-1
  7. Ajax中什么时候用同步,什么时候用异步?
  8. [Python人工智能] 二十四.易学智能GPU搭建Keras环境实现LSTM恶意URL请求分类
  9. OpenGL ES之GLKit的使用功能和API说明
  10. Redis面试题答案整理