首页 文章资讯内容详情

在 C++ 中不使用任何额外空间的情况下将矩阵旋转 90 度

2026-06-02 1 花语

我们得到一个二维数组,用于形成矩阵模式。任务是将矩阵逆时针旋转90度,使第一行成为第一列,第二行成为第二列,第三行成为第三列,挑战在于我们不必使用任何额外的空间。

让我们看看这个的各种输入输出场景-

输入 -

int arr[row_col_size][row_col_size] = { { 5, 1, 4}, { 9, 16, 12 }, { 2, 8, 9}}

输出 -

Rotation of a matrix by 90 degree without using any extra space is: 4 12 9 1 16 8 5 9 2

说明 -我们得到一个整数类型的二维数组。现在我们将按顺时针方向将矩阵旋转90度。

Before rotation-: { { 5, 1, 4}, { 9, 16, 12 }, { 2, 8, 9}} After rotation-: 2 12 9 1 16 8 5 9 2

输入 -

int arr[row_col_size][row_col_size] = { { 2, 1, 9}, { 11, 6, 32 }, { 3, 7, 5}}

输出 -

Rotation of a matrix by 90 degree in clockwise direction without using any extra space is: 9 32 5 1 6 7 2 7 3

说明-我们得到一个整数类型的二维数组。现在我们将按顺时针方向将矩阵旋转90度。

Before rotation-: { { 2, 1, 9}, { 11, 6, 32 }, { 3, 7, 5}} After rotation-: 9 32 5 1 6 7 2 7 3

下面程序中使用的方法如下

1.天真的方法

输入一个二维整数数组,该数组将被视为具有row_col_size的矩阵。

将数据传递给函数Rotate_ClockWise(arr)。

函数内部Rotate_ClockWise(arr)

从i到0开始循环FOR,直到i小于row_col_size/2。

在循环内部,从j到0开始另一个循环FOR,直到j小于row_col_size-i-1。

在循环内,将ptr设置为arr[i][j],将arr[i][j]设置为arr[row_col_size-1-j][i],将arr[row_col_size-1-j][i]设置为arr[row_col_size-1-i][row_col_size-1-j],arr[row_col_size-1-i][row_col_size-1-j]到arr[j][row_col_size-1-i]和arr[j][row_col_size-1-i]到ptr。

从i到0开始循环FOR,直到i小于row_col_size。在循环内部,从j到0开始另一个循环FOR,直到j小于row_col_size;j++并打印arr[i][j]。

2.有效的方法

输入一个二维整数数组,该数组将被视为具有row_col_size的矩阵。

将数据传递给函数Rotate_ClockWise(arr)。

函数内部Rotate_ClockWise(arr)

从i到0开始循环FOR,直到i小于row_col_size。

在循环内,从j到0开始另一个循环FOR,直到j小于row_col_size-i。

在循环内,将ptr设置为arr[i][j],将arr[i][j]设置为arr[row_col_size-1-j]arr[row_col_size-1-i]并将[row_col_size-1-j]设置为arr[j][row_col_size-1-i]到ptr。

从i到0开始循环FOR,直到i小于row_col_size/2。在循环内,从j到0开始另一个循环FOR,直到j小于row_col_size。在循环内,将ptr设置为arr[i][j],将arr[i][j]设置为arr[row_col_size-1-i][j]并将arr[row_col_size-1-i][j]设置为ptr

从i到0开始循环FOR,直到i小于row_col_size。在循环内部,从j到0开始另一个循环FOR,直到j小于row_col_size;j++并打印arr[i][j]。

天真的方法

示例

#include <bits/stdc++.h> using namespace std; #define row_col_size 3 void Rotate_ClockWise(int arr[row_col_size][row_col_size]){ for(int i = 0; i < row_col_size / 2; i++){ for(int j = i; j < row_col_size - i - 1; j++){ int ptr = arr[i][j]; arr[i][j] = arr[row_col_size - 1 - j][i]; arr[row_col_size - 1 - j][i] = arr[row_col_size - 1 - i][row_col_size - 1 - j]; arr[row_col_size - 1 - i][row_col_size - 1 - j] = arr[j][row_col_size - 1 - i]; arr[j][row_col_size - 1 - i] = ptr; } } } int main(){ int arr[row_col_size][row_col_size] = { { 5, 1, 4},{ 9, 16, 12 },{ 2, 8, 9}}; Rotate_ClockWise(arr); cout<<"Rotation of a matrix by 90 degree in clockwise direction without using any extra space is: \n"; for(int i = 0; i < row_col_size; i++){ for(int j = 0; j < row_col_size; j++){ cout << arr[i][j] << " "; } cout << \n; } return 0; }输出结果

如果我们运行上面的代码,它将生成以下输出

Rotation of a matrix by 90 degree in clockwise direction without using any extra space is: 2 9 5 8 16 1 9 12 4

有效的方法

示例

#include <bits/stdc++.h> using namespace std; #define row_col_size 3 void Rotate_ClockWise(int arr[row_col_size][row_col_size]){ for(int i = 0; i < row_col_size; i++){ for(int j = 0; j < row_col_size - i; j++){ int ptr = arr[i][j]; arr[i][j] = arr[row_col_size - 1 - j][row_col_size - 1 - i]; arr[row_col_size - 1 - j][row_col_size - 1 - i] = ptr; } } for(int i = 0; i < row_col_size / 2; i++){ for(int j = 0; j < row_col_size; j++){ int ptr = arr[i][j]; arr[i][j] = arr[row_col_size - 1 - i][j]; arr[row_col_size - 1 - i][j] = ptr; } } } int main(){ int arr[row_col_size][row_col_size] = { { 5, 1, 4},{ 9, 16, 12 },{ 2, 8, 9}}; Rotate_ClockWise(arr); cout<<"Rotation of a matrix by 90 degree in clockwise direction without using any extra space is: \n"; for(int i = 0; i < row_col_size; i++){ for(int j = 0; j < row_col_size; j++){ cout << arr[i][j] << " "; } cout << \n; } return 0; }输出结果

如果我们运行上面的代码,它将生成以下输出

Rotation of a matrix by 90 degree in clockwise direction without using any extra space is: 2 9 5 8 16 1 9 12 4