📜  旋转矩阵元素的 C++ 程序

📅  最后修改于: 2022-05-13 01:55:40.856000             🧑  作者: Mango

旋转矩阵元素的 C++ 程序

给定一个矩阵,顺时针旋转其中的元素。

例子:

Input
1    2    3
4    5    6
7    8    9

Output:
4    1    2
7    5    3
8    9    6

For 4*4 matrix
Input:
1    2    3    4    
5    6    7    8
9    10   11   12
13   14   15   16

Output:
5    1    2    3
9    10   6    4
13   11   7    8
14   15   16   12

这个想法是使用类似于以螺旋形式打印矩阵的程序的循环。从最外层开始,一个接一个地旋转所有元素环。要旋转环,我们需要执行以下操作。
1)移动顶行的元素。
2) 移动最后一列的元素。
3)移动底行的元素。
4) 移动第一列的元素。
当有内圈时,对内圈重复上述步骤。

下面是上述想法的实现。感谢 Gaurav Ahirwar 提出以下解决方案。

C++
// C++ program to rotate a matrix
 
#include 
#define R 4
#define C 4
using namespace std;
 
// A function to rotate a matrix mat[][] of size R x C.
// Initially, m = R and n = C
void rotatematrix(int m, int n, int mat[R][C])
{
    int row = 0, col = 0;
    int prev, curr;
 
    /*
    row - Starting row index
    m - ending row index
    col - starting column index
    n - ending column index
    i - iterator
    */
    while (row < m && col < n)
    {
 
        if (row + 1 == m || col + 1 == n)
            break;
 
        // Store the first element of next row, this
        // element will replace first element of current
        // row
        prev = mat[row + 1][col];
 
        /* Move elements of first row from the remaining rows */
        for (int i = col; i < n; i++)
        {
            curr = mat[row][i];
            mat[row][i] = prev;
            prev = curr;
        }
        row++;
 
        /* Move elements of last column from the remaining columns */
        for (int i = row; i < m; i++)
        {
            curr = mat[i][n-1];
            mat[i][n-1] = prev;
            prev = curr;
        }
        n--;
 
        /* Move elements of last row from the remaining rows */
        if (row < m)
        {
            for (int i = n-1; i >= col; i--)
            {
                curr = mat[m-1][i];
                mat[m-1][i] = prev;
                prev = curr;
            }
        }
        m--;
 
        /* Move elements of first column from the remaining rows */
        if (col < n)
        {
            for (int i = m-1; i >= row; i--)
            {
                curr = mat[i][col];
                mat[i][col] = prev;
                prev = curr;
            }
        }
        col++;
    }
 
    // Print rotated matrix
    for (int i=0; i


输出:

5 1 2 3
9 10 6 4
13 11 7 8
14 15 16 12

有关更多详细信息,请参阅有关旋转矩阵元素的完整文章!