Таблица эквивалентности может быть реализована с использованием HashMap
. Каждый раз, когда вы найдете метку, эквивалентную другой метке, просто добавьте это отношение к карте хэша.
final Map<Integer, Integer> equivalenceTable = new HashMap<>();
Таким образом, всякий раз, когда вы найдете две одинаковые метки, просто поместите их в таблицу эквивалентности.
private void storeEquivalence(final Integer label0, final Integer label1, final Map<Integer, Integer> table) {
if (table.keySet().contains(label0)) {
table.put(label1, table.get(label0));
}
else if (table.keySet().contains(label1)) {
table.put(label0, table.get(label1));
}
else {
table.put(label0, label1);
}
}
Итак, когда вы определить, что region[x-1][y]
и region[x][y-1]
равны, вы должны проверить, если метки различны (они должны быть) и обновить таблицу эквивалентности, если являются по телефону
storeEquivalence(region[x-1][y], region[x][y-1], equivalenceTable);
Тогда в второй проход вы просто заменяете каждую метку, которая имеет значение в таблице эквивалентности.
for (int x = 1; x < imageTwo.getWidth(); x++) {
for (int y =1; y < imageTwo.getHeight(); y++) {
if (equivalenceTable.keySet().contains(region[x][y])) {
region[x][y] = equivalenceTable.get(region[x][y]);
}
}
}
Вы не должны удалить свой код из вопроса. Он будет давать ответы, ссылаясь на код, который трудно понять. – mags