将矩阵顺时针方向旋转 90 度而不使用 C++ 中的任何额外空间

我们得到一个二维数组,用于形成矩阵模式。任务是将矩阵顺时针旋转 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 in clockwise direction without using any extra space is:

2 9 5

8 16 1

9 12 4

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

Before rotation-:

{ { 5, 1, 4},

{ 9, 16, 12 },

{ 2, 8, 9}}

After rotation-:

2 9 5

8 16 1

9 12 4

输入   -

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:

2 9 5

8 16 1

9 12 4

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

Before rotation-:

{ { 2, 1, 9},

{ 11, 6, 32 },

{ 3, 7, 5}}

After rotation-:

3 11 2

7 6 1

5 32 9

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

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

以上是 将矩阵顺时针方向旋转 90 度而不使用 C++ 中的任何额外空间 的全部内容, 来源链接: utcz.com/z/358266.html

回到顶部