3/jekyll_site/ru/2021/12/16/matrix-rotation-180-degrees.md
2023-12-17 07:56:19 +03:00

3.5 KiB
Raw Blame History

title description sections tags canonical_url url_translated title_translated date
Поворот матрицы на 180 градусов Рассмотрим алгоритм разворота матрицы на 180 градусов. В отличие от алгоритма транспонирования, здесь в результирующей матрице строки и колонки не меняются...
Транспонирование
Сравнение алгоритмов
java
массивы
многомерные массивы
матрицы
строки
колонки
циклы
вложенные циклы
/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