数组4——二维数组1——将矩阵顺时针旋转90度

版权声明:本文为博主原创文章,未经博主允许不得转载。 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");
}

结果:

猜你喜欢

转载自blog.csdn.net/baidu_36669549/article/details/84946755