Надеюсь, под «ротацией» вы не имели в виду обычную транспонирование, потому что есть много ответов на это уже в stackoverflow. Какой самый быстрый способ транспонировать матрицу в C ++?
Для вращения матрицы я изменил ваш код, чтобы он работал, как показано ниже.Логика заключается в том, что первая строка исходной матрицы становится последним столбцом повернутой матрицы, и, используя эту логику, вы получите следующий код.Надеюсь, поможет.
#include <iostream>
using namespace std;
void print2DArray(int **arr, int rows, int cols);
int **Rotate(int **arr, int num_rows, int num_cols);
int main()
{
int num_rows = 3;
int num_cols = 3;
int** A_matrix = new int*[num_rows];
for (int i = 0; i < num_rows; i++)
A_matrix[i] = new int[num_cols];
for (int row = 0; row < num_rows; row++)
{
for (int col = 0; col < num_cols; col++)
{
A_matrix[row][col] = rand() % 20;
}
}
cout << "The array is :\n";
print2DArray(A_matrix, 3, 3);
int** roated_matrix;
roated_matrix = Rotate(A_matrix, num_rows, num_cols);
cout << "Rotated array:" << endl;
print2DArray(roated_matrix, 3, 3);
return 0;
}
int **Rotate(int **arr, int num_rows, int num_cols)
{
/* Rotated matrix will have dimensions reverse as well.
That's why we have rows and cols reversed in the following lines */
int** rotated_matrix = new int*[num_cols];
for (int i = 0; i < num_cols; i++)
rotated_matrix[i] = new int[num_rows];
for (int row = 0; row < num_rows; row++)
{
int col_rotated_matrix = num_rows - 1 - row; // 1st row shall be copied to the last column and so on
for (int col = 0; col < num_cols; col++)
{
int row_rotated_matrix = col; // rows become columns in the rotated matrix
rotated_matrix[row_rotated_matrix][col_rotated_matrix] = arr[row][col];
}
}
return rotated_matrix;
}
void print2DArray(int **arr, int rows, int cols)
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
}
Создает следующий вывод:
The array is :
1 7 14
0 9 4
18 18 2
Rotated array:
18 0 1
18 9 7
2 4 14