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度。