版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_36669549/article/details/84946755
【定义】
二维数组也称为矩阵(Matrix),关于矩阵的算法经常在各种考试及面试中出现,它主要考查被测试者的逻辑思维能力、下标的灵活应用及对C语言的掌握程度,这种题目通常有较高的难度,通常需要二重循环实现。经典的矩阵算法有将矩阵旋转90度、魔方阵、拉丁方阵、蛇形方阵、内螺旋矩阵、外螺旋矩阵、逆螺旋矩阵。
【问题】将矩阵顺时针旋转90度
如图
【分析】
这题是北京航天大学考研试题。对于任意N阶方阵,如果N是偶数,则矩阵构成N/2圈;如果N是奇数,则矩阵构成(N-1)/2。将矩阵顺时针旋转90度,就是将每圈的元素在四个方位依次轮换位置。例如,对于5×5矩阵来说,将6放在原来4的位置,4放在原来20的位置,20放在原来22的位置,22放在原来6的位置。这需要将这4个元素依次交换位置,具体交换过程
如图
从图可以看出,交换元素的公式如下图:
main.cpp
#include <iostream>
using namespace std;
#include <iomanip>
#define MAX 20
void main()
{
int a[MAX][MAX], i, j, t, p = 1, n;
cout << "请输入矩阵的阶:" << endl;
cin >> n;
cout << "*******旋转前的矩阵*******"<<endl;
for (i = 1; i <= n;i++)
{
for (j = 1; j <= n;j++)
{
a[i][j] = p++;
cout << setw(4) << a[i][j];
}
cout << endl;
}
cout << "*******旋转后的矩阵*******" << endl;
for (i = 1; i <= n / 2;i++)
{
for (j = i; j < n - i + 1;j++)
{
t = a[i][j];
a[i][j] = a[n - j + 1][i];
a[n - j + 1][i] = a[n - i + 1][n - j + 1];
a[n - i + 1][n - j + 1] = a[j][n - i + 1];
a[j][n - i + 1] = t;
}
for (i = 1; i <= n;i++)
{
for (j = 1; j <= n;j++)
{
cout << setw(4) << a[i][j];
}
cout << endl;
}
}
system("pause");
}
结果: