细胞分离

计算科学 C++ 网格
2021-12-03 09:39:56

存在仅包含四边形单元的非结构化网格。每个单元格有 4 个邻居,并且知道他们(有一个指向他们的指针)。我可以遍历网格中的所有单元格。一些单元格标记为“A - 红色”,一些单元格标记为“B - 蓝色” - 见附图 -图片

细胞形成蓝色和红色区域。我需要将它们分开 - 我需要哪些单元格属于区域 A1、A2、B1、B2 等的信息。每种类型的区域数量是未知的。

1个回答

假设你有一个细胞K,那么这里有一个算法来找到所有与之相连的单元格K并具有相同的颜色(即,查找域的所有单元格):

domain = ()
new_cells_list = (K)
while (new_cells_list not empty)
    // find all neighbors of recently found cells
    // that have the same color and that we haven't
    // visited yet
    next_cells_list = ()
    for (T in new_cells_list)
      for (n=1..4)
        if (T.neighbor(n).color() == K.color()
            &&
            T.neighbor(n) not in domain
            &&
            T.neighbor(n) not in new_cells_list
            &&
            T.neighbor(n) not in next_cells_list)
          next_cells_list.append(T.neighbor(n))
    domain.append (new_cells_list);
    new_cells_list = next_cells_list;

对于给定的单元格K,这将为您提供与其连接的所有其他相同颜色的单元格。您现在可以重复此操作:从一个单元格开始,找到它的域。然后找到不属于第一个域的下一个单元格并找到它的域。找到不属于前两个域的下一个单元格并找到它的域。等等。通过计算这个过程重复的频率,你可以得到有多少个域。