Развернуть матрицу, используя скалярные выражения

Рейтинг: 1Ответов: 1Опубликовано: 09.09.2014

Добрый день.

Есть задание:

Дана квадратная матрица размерности N, например:


| 5 |12|88|

|65|54|43|

|81|92|56|

Нужно ее развернуть на 90 градусов, чтобы вышло:


|81|65| 5 |

|92|54|12|

|56|43|88|

Вопрос: как это сделать, не копируя матрицу в память и без использования любых динамических структур? Можно использовать счетное количество скалярных переменных, не зависящее от размерности матрицы.

UPD:

Делаю так:

public static void Rotate()
{
    int tmp;
    for (int i = 0; i < n/2; i++)
    {
        for (int j = i; j < n - 1 - i; j++)
        {
            tmp = matrix[i,j];
            matrix[i,j] = matrix[n - j - 1,i];
            matrix[n - j - 1,i] = matrix[n - i - 1,n - j - 1];
            matrix[n - i - 1,n - j - 1] = matrix[j,n - i - 1];
            matrix[j, n - i - 1] = tmp;
        }
     }
}

Спасибо!

Ответы

▲ 1Принят

Задача решена.

int tmp, i, j; // 3 дополнительных переменных
for (i = 0; 2*i < n; i++)
{
    for (j = i; j < n - 1 - i; j++)
    {
        tmp = matrix[i,j];
        matrix[i,j] = matrix[n - j - 1,i];
        matrix[n - j - 1,i] = matrix[n - i - 1,n - j - 1];
        matrix[n - i - 1,n - j - 1] = matrix[j,n - i - 1];
        matrix[j, n - i - 1] = tmp;
    }
 }