C++程序 在原地旋转正方形矩阵的90度 – 1

C++程序 在原地旋转正方形矩阵的90度 – 1

问题描述

给定一个N x N的矩阵,将其原地旋转90度(即不开辟额外的空间)。我们需要解决的问题是在C++语言下,如何实现该功能。

示例

让我们以一个4 x 4的矩阵为例:

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

旋转之后,矩阵变为:

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

解决方案

先将矩阵按照其对角线反转,再按照中心水平线反转。这个流程就可以实现我们所要的旋转矩阵的功能。

代码示例

下面的代码实现了矩阵的旋转:

#include<bits/stdc++.h>//万能头
using namespace std;
#define int long long//定义long long
#define rep(i,l,r) for(int i=(l),i##end=(r);i<=i##end;++i)//万能循环
#define per(i,r,l) for(int i=(r),i##end=(l);i>=i##end;--i)
#define fi first
#define se second
#define pb emplace_back
#define mp make_pair
typedef pair<int,int> pii;
const int mod=1e9+7,N=55;
inline int read()
{
    int s(0),w(1);
    char ch=getchar();
    while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
    while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
    return s*w;
}

int n;
int a[N][N];

signed main()
{
    n=read();
    rep(i,1,n)rep(j,1,n) a[i][j]=read();

    rep(i,1,n-1)
    {
        rep(j,1,n-i)
        {
            swap(a[i][j],a[n-j+1][n-i+1]);
        }
    }
    rep(i,1,n/2)
    {
        rep(j,1,n)
        {
            swap(a[i][j],a[n-i+1][j]);
        }
    }
    rep(i,1,n)
    {
        rep(j,1,n) printf("%lld ",a[i][j]);
        puts("");
    }

    return 0;
}

结论

通过将矩阵按照其对角线反转,再按照中心水平线反转的方式,就能够在C++语言下,在原地旋转正方形矩阵的90度。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

C++ 示例