Не смог найти библиотеку, которая позволяет заполнить матрицу по спирали, например так:
1 2 3
8 9 4
7 6 5
или наоборот - из центра наружу.
Кто знает, как это сделать самому?
Используйте метод getSpiralMatrix()
реализованный ниже:
package com.example;
import java.util.stream.IntStream;
public class SpiralMatrix {
public int[][] getSpiralMatrix(int n, boolean reverse) {
int [][] matrix = new int[n][];
IntStream.range(0, n).forEach(i -> matrix[i] = new int[n]);
int x = 0;
int y = 0;
int z = n;
for (int i = 0, j = n * n; i < j;) {
matrix[x][y] = reverse ? j - i++ : ++i;
if (x < z + (n - z) / 2 - 1 && y == (n - z) / 2) {
x++;
} else if (x == z + (n - z) / 2 - 1 && y < z + (n - z) / 2 - 1) {
y++;
} else if (x > (n - z) / 2 && y == z + (n - z) / 2 - 1) {
x--;
} else if (x == (n - z) / 2 && y > (n - z) / 2 + 1) {
y--;
} else {
x++;
z -= 2;
}
}
return matrix;
}
public static void main(String[] args) {
SpiralMatrix sp = new SpiralMatrix();
int n = 9;
int[][] matrix = sp.getSpiralMatrix(n, true);
printMatrix(matrix);
System.out.println("===========================");
matrix = sp.getSpiralMatrix(n, false);
printMatrix(matrix);
}
private static void printMatrix(int[][] matrix) {
IntStream.range(0, matrix.length).forEach(i -> {
IntStream.range(0, matrix.length).forEach(j -> System.out.printf("%02d ", matrix[j][i]));
System.out.println();
});
}
}
Этот демонстрационный код напечатает:
81 80 79 78 77 76 75 74 73
50 49 48 47 46 45 44 43 72
51 26 25 24 23 22 21 42 71
52 27 10 09 08 07 20 41 70
53 28 11 02 01 06 19 40 69
54 29 12 03 04 05 18 39 68
55 30 13 14 15 16 17 38 67
56 31 32 33 34 35 36 37 66
57 58 59 60 61 62 63 64 65
===========================
01 02 03 04 05 06 07 08 09
32 33 34 35 36 37 38 39 10
31 56 57 58 59 60 61 40 11
30 55 72 73 74 75 62 41 12
29 54 71 80 81 76 63 42 13
28 53 70 79 78 77 64 43 14
27 52 69 68 67 66 65 44 15
26 51 50 49 48 47 46 45 16
25 24 23 22 21 20 19 18 17
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пишу приложение под androidСоздал отдельное activity для словаря(приложение будет переводить слова из существующей базы и при подключении интернета...
Нужен был GPS в приложении под андроидЕсть простой код(снизу) , он пару дней поработал а сейчас уже не работает
Суть в следующем: Читаю файл построчно с помощью BufferedReader