3.5 KiB
3.5 KiB
title | description | sections | tags | canonical_url | url_translated | title_translated | date | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Поворот матрицы на 180 градусов | Рассмотрим алгоритм разворота матрицы на 180 градусов. В отличие от алгоритма транспонирования, здесь в результирующей матрице строки и колонки не меняются... |
|
|
/ru/2021/12/16/matrix-rotation-180-degrees.html | /en/2021/12/17/matrix-rotation-180-degrees.html | Matrix rotation 180 degrees | 2021.12.16 |
Рассмотрим алгоритм разворота матрицы на 180 градусов. В отличие от алгоритма транспонирования, здесь в результирующей матрице строки и колонки не меняются местами, но отображаются зеркально.
// строки и колонки меняются местами
swapped[j][i] = matrix[i][j];
// строки и колонки отображаются зеркально
rotated[i][j] = matrix[m-i-1][n-j-1];
Похожий алгоритм: [Поворот матрицы на 90 градусов]({{ '/ru/2021/12/12/matrix-rotation-90-degrees.html' | relative_url }}).
Напишем метод на Java для поворота матрицы {m×n
} на 180 градусов. Для примера возьмём
прямоугольную матрицу {4×3
}.
/**
* @param m количество строк исходной матрицы
* @param n количество колонок исходной матрицы
* @param matrix исходная матрица
* @return повёрнутая матрица
*/
public static int[][] rotateMatrix(int m, int n, int[][] matrix) {
// новая матрица
int[][] rotated = new int[m][n];
// обходим строки исходной матрицы
for (int i = 0; i < m; i++)
// обходим колонки исходной матрицы
for (int j = 0; j < n; j++)
// строки и колонки отображаются зеркально
rotated[i][j] = matrix[m-i-1][n-j-1];
return rotated;
}
{% raw %}
// запускаем программу и выводим результат
public static void main(String[] args) {
// исходные данные
int m = 4, n = 3;
int[][] matrix = {{11, 12, 13}, {14, 15, 16}, {17, 18, 19}, {20, 21, 22}};
// поворачиваем матрицу и выводим результат
outputMatrix("Исходная матрица:", matrix);
outputMatrix("Поворот на 180°:", rotateMatrix(m, n, matrix));
}
{% endraw %}
// вспомогательный метод, выводит матрицу в консоль построчно
public static void outputMatrix(String title, int[][] matrix) {
System.out.println(title);
for (int[] row : matrix) {
for (int el : row)
System.out.print(" " + el);
System.out.println();
}
}
Вывод:
Исходная матрица:
11 12 13
14 15 16
17 18 19
20 21 22
Поворот на 180°:
22 21 20
19 18 17
16 15 14
13 12 11