Как повернуть N x N матрица на 90 градусов? [закрытый]

На сегодняшний день (2015, 1 августа), Apache2 в Debian Jessie, вам нужно отредактировать:

root@host:/etc/apache2/mods-enabled$ vi dir.conf 

И изменить порядок этой строки, приведя index.php к первой позиции:

DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
25
задан Passionate programmer 23 May 2010 в 19:27
поделиться

3 ответа

for(int i=0; i<n/2; i++)
   for(int j=0; j<(n+1)/2; j++)
       cyclic_roll(m[i][j], m[n-1-j][i], m[n-1-i][n-1-j], m[j][n-1-i]);


void cyclic_roll(int &a, int &b, int &c, int &d)
{
   int temp = a;
   a = b;
   b = c;
   c = d;
   d = temp;
}

Note Я не тестировал это, просто сочинил сейчас на месте. Пожалуйста, проверьте, прежде чем что-либо делать с ним.

51
ответ дан 28 November 2019 в 20:38
поделиться
//Java version, fully tested

public class Rotate90degree {


        public static void reverseElementsRowWise(int[][] matrix) {
            int n = matrix.length;
            for(int i = 0; i < n; ++i) {
                for(int j = 0; j < n / 2; ++j) {
                    int temp = matrix[i][n - j - 1];
                    matrix[i][n - j - 1] = matrix[i][j];
                    matrix[i][j] = temp;
                }
            }
        }

        public static void transpose(int[][] matrix) {
            int n = matrix.length;
            for(int i = 0; i < n; ++i) {
                for(int j = i + 1; j < n; ++j) {
                    int temp = matrix[i][j];
                    matrix[i][j] = matrix[j][i];
                    matrix[j][i] = temp;
                }
            }
        }

        public static void rotate90(int[][] matrix) {
            transpose(matrix);
            reverseElementsRowWise(matrix);
        }

        public static void print(int[][] matrix) {
            int n = matrix.length;
            for(int i = 0; i < n; ++i) {
                for(int j = 0; j < n; ++j) {
                    System.out.print(matrix[i][j]);
                    System.out.print(' ');
                }
                System.out.println();
            }
        }

        public static void main(String[] args) {
            int[][] matrix = {
                    {1, 2, 3, 4},
                    {5, 6, 7, 8},
                    {9, 10, 11, 12},
                    {13, 14, 15, 16}};
            System.out.println("before");
            print(matrix);
            rotate90(matrix);
            System.out.println("after");
            print(matrix);
        }
}
0
ответ дан Viren 28 November 2019 в 20:38
поделиться

Вы можете создать второй массив, а затем скопировать первый во второй, прочитав строковый мажор в первом и писать столбец второму.

Таким образом, вы должны скопировать:

1  2  3
4  5  6
7  8  9

, и вы прочитаете первую строку, а затем запишите ее, начиная с:

3
2
1
-5
ответ дан 28 November 2019 в 20:38
поделиться