Компьютерное моделирование физических явлений. Малютин В.М - 88 стр.

UptoLike

Ясно, что правильное присваивание кластерной метки ячейке(6,2)
заключается в выборе меньшей из меток 3 и 4. Следовательно, ячейке(6,2)
присваивается метка 3, а метка 4 должна замениться на метку 3.
Однако,поскольку в дальнейшем могут проводиться другие изменения
присвоенных меток, мы не будем проводить изменение меток до тех пор,
пока не будет обследована вся решетка. Эта процедура изменения меток
выполняется с помощью разделения правильных меток, таких, как 3, и
неправильных, таких, как 4. Введем дополнительный массив ulp(i), в
котором разделяются правильные и неправильные метки и учитываются их
связи. Вернемся к конфигурации, показанной на рис. 5.6, чтобы объяснить,
как используется этот массив. Прежде чем мы попадем в ячейку(6,2), метки
от 1 до 4 считаются правильными, и мы полагаем
ulp (1) = 0, ulp (2) = 0, ulp (3) = 0, ulp (4) = 0 ...
Однако в ячейке(6,2), где метки 3 и 4 связаны, мы положим ulp(4) = 3.
Этот ненулевой элемент ulp(4) массива показывает, что метка 4 является
неправильной, а численное значение ulp(4) показывает, что метка 4 связана с
меткой 3. Заметим, что индекс массива всегда больше самого значения ulp.
Для того чтобы работа со всеми элементами массива была
единообразной, удобно добавить к нему одну строку с номером 0 и один
столбец с номером 0, заполненные нулями. Итак, возможны следующие
ситуации.
Если значение текущего элемента массива ячеек равно 0, то
переходим к следующему элементу.
Если текущее значение равно 1, то осуществляем следующую
проверку:
- Если сосед слева (i, j–1) и сосед сверху (i -1, j) имеют значения 0,
то в качестве рабочей гипотезы принимаем, что данный элемент
входит в новый кластер, присваиваем текущему элементу номер
очередной кластерной метки. Конечно, вполне может оказаться,
что новый, как нам кажется, кластер является просто веткой
какого-то другого кластера. Выяснить это мы сможем только
просмотрев весь массив целиком.
- Если сосед сверху имеет значение 0, а сосед слева не равен нулю,
то текущая ячейка и ее сосед слева принадлежат одному и тому
же кластеру. Текущему элементу присваиваем номер кластерной
метки соседа слева.
- Если сосед сверху имеет значение, отличное от нуля, а сосед слева
нулевое значение, то текущая ячейка и ее сосед сверху
принадлежат одному и тому же кластеру. Однако у соседа сверху
кластерная метка может быть неправильной, так как в результате
последующих проверок могло выясниться, что кластер, к
88