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度。
 极客笔记
极客笔记