Как найти элементы, наиболее близкие к заданному элементу 2D-массива?
Привет,
Скажем, у меня есть 2D-массив, который мы используем, например, в качестве игровой доски.
Например, 2D-массив 5x5 типа char, инициализированный точками и буквой "S".
char[][] array = new char[5][5]
.....
.....
..С..
.....
.....
Как я могу найти индексы 2D-массива, которые находятся ближе всего к букве S (она же обертка вокруг нее), с точки зрения близости на доске, а затем превратить это в новый массив?
Таким образом, в этом примере 8 точек, окружающих S, теперь могут быть инициализированы в новый массив.
Что я уже пробовал:
Я попытался найти Евклидово расстояние между данной точкой и элементами массива, которые ее окружают, а затем прикрепить объекты этого массива к длине с помощью хэш-карты. Обратите внимание, что приведенный выше вопрос больше для простоты, и мой фактический проект работает с 2D-массивами пользовательского типа, что видно из приведенного ниже кода. Тем не менее, эта концепция все еще применима.
public static void getIndexes(Grid_23722002 grid, Piece_23722002 piece){ int row = piece.getRow(); int col = piece.getCol(); Piece_23722002[][] nhood = new Piece_23722002[8][8]; Map<Piece_23722002, Integer> unsortedLengthMap = new LinkedHashMap<Piece_23722002, Integer>(); for (int i =0; i < grid.getArrayForm().length; i++){ for (int j =0; j < grid.getArrayForm()[i].length; j++){ unsortedLengthMap.put(piece, grid.getArrayForm()[i][j].getLengthToPoint(grid, i, j, piece)); } } Map<Piece_23722002, Integer> sortedLengthMap = new LinkedHashMap<Piece_23722002, Integer>(); unsortedLengthMap.entrySet() .stream() .sorted(Map.Entry.comparingByValue()) .forEachOrdered(x -> sortedLengthMap.put(x.getKey(), x.getValue())); } public int getLengthToPoint(Grid_23722002 grid, int i, int j, Piece_23722002 piece){ int piecesRow = piece.getRow(); int piecesCol = piece.getCol(); int length = (int) Math.sqrt(Math.pow(grid.getArrayForm()[i][j].getRow() - piecesRow, 2) + Math.pow(grid.getArrayForm()[i][j].getCol() - piecesCol, 2)); return length; }