1. 程式人生 > >陣列4——二維陣列1——將矩陣順時針旋轉90度

陣列4——二維陣列1——將矩陣順時針旋轉90度

【定義】

二維陣列也稱為矩陣(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");
}

結果: