Мне нужно написать код для метода, который вернет число объектов, которые касаются друг друга для проекта java, над которым я работаю. Это может быть довольно сложно обернуть вокруг вас, вот вот наглядный пример.
Где светло-серый квадрат - это начало, которое должно быть любым из квадратов, и любой квадрат, который окрашен, является копией одного и того же объекта (тот же код); Мне нужно найти количество квадратов в любом заданном шаблоне, если они касаются другого. Это вернет 42, если я посчитаю правильно, потому что это число цветных квадратов. У меня есть доступ к методам, которые будут проверять блоки выше, ниже и по обе стороны от блока и возвращать логическое значение, но они могут видеть только 1, 1 и 1 по две стороны. Я думаю, что это должно вызвать какую-то цепную реакцию. Где другие блоки проверяют 1 выше, ниже и по сторонам. В частности, это будет написано в java, но это скорее алгоритм/математический вопрос.
Create two lists - you can call them open and closed.
Add the start square to the open list.
While the open list is not empty:
Remove one of the objects from the open list.
Add this object to the closed list.
For each of the 4 addjacent squares to this object:
If the square is not in the open or closed lists and is the type you are trying to find add this square to the open list.
The size of the closed list is your answer.
Поскольку вы, похоже, храните много ссылок на один и тот же объект на плоскости вместо разных объектов в каждом месте, проверка списков, чтобы увидеть, находится ли объект в них, не будет работать.
Одним из способов решения этой проблемы является замена списков на два булевых массива размером с ваш самолет, и вместо добавления или удаления объектов из списка переверните значение булева в том же месте, что и квадрат, обрабатываемый в true или false.
Другим способом было бы создать разные объекты для каждого расположения сетки и дать им другую переменную, чтобы определить, являются ли они типом, который вы ищете, вместо того, чтобы искать один и тот же объект.
Третий способ - добавить объект, который представляет собой позицию в плоскости, вместо добавления объекта, который вы нашли в этой позиции.