思路1 并查集

把一个square看成四个三角形。

如果将每个三角形看作为一张图上的节点,则网格中的一个共边区域,就相当于图中的一个连通分量。因此,不难想到利用并查集求解连通分量的数目。

设网格为 n n 大小,则图中有 4 n^2 个节点,每个格子对应其中的 4 个节点。对于每个格子而言,考虑当前位置的字符

  • 为空格,则四个节点都连通

  • /,则左上角两个节点连通,右下角两个节点连通

  • \,则右上角两个节点连通,左下角两个节点连通

上面是一个square内部的情,如果看square之间的话,有:

  • 一个格子中最下方的三角形,必然和下面的格子(如果存在)中最上方的三角形连通

  • 一个格子中最右方的三角形,必然和右边的格子(如果存在)中最左方的三角形连通。

构造好图之后,利用并查集统计连通分量的个数即可

具体实现方面,每个格子的 4 个节点按照上、右、下、左的顺序依次编号 0123,每个节点可以根据格子所在的行和列以及节点在格子中的编号唯一地确定。

Last updated