長い幅と等しい行列(二次元配列)は、反時計回りに90度回転します。

1903 ワード

長い幅と等しい行列(二次元配列)を反時計回りに90度回転させます。例えば、次の二次元配列があります。
00 10 20 30 40 50 60  
01 11 21 31 41 51 61  
02 12 22 32 42 52 62  
03 13 23 33 43 53 63  
04 14 24 34 44 54 64  
05 15 25 35 45 55 65  
06 16 26 36 46 56 66  
それを反時計回りに90度回転させると、比較的早い方法は2回の位置で交換すればいいです。
第1のステップは、行列を「左上」から「右下」までの対角線に沿って合わせます。
00 01 02 03 04 05 06  
10 11 12 13 14 15 16  
20 21 22 23 24 25 26  
30 31 32 33 34 35 36  
40 41 42 43 44 45 46  
50 51 52 53 54 55 56  
60 61 62 63 64 65 66  
第二のステップは、行列の上で下方向に合わせて調整します。すなわち、第一の行と後ろから第一の行を合わせます。第二の行は下から二番目の行に合わせて調整します。順に類推します。最終版の二次元配列(すなわち元の二次元配列は反時計回りに90度回転する配列)が得られます。
60 61 62 63 64 65 66  
50 51 52 53 54 55 56  
40 41 42 43 44 45 46  
30 31 32 33 34 35 36  
20 21 22 23 24 25 26  
10 11 12 13 14 15 16  
00 01 02 03 04 05 06  
関連するjava版の小テストプログラムは以下の通りです。
public class Test {
	public static void main(String[] args) {
		String m_TestData[][] = {
				{"00","10","20","30","40","50","60"},
				{"01","11","21","31","41","51","61"},
				{"02","12","22","32","42","52","62"},
				{"03","13","23","33","43","53","63"},
				{"04","14","24","34","44","54","64"},
				{"05","15","25","35","45","55","65"},
				{"06","16","26","36","46","56","66"}
		};
		int iX, iY;
		String tmpData;
		int m_iHeight = 7;
		int m_iWidth = 7;
		System.out.println("    :");
		for(iY=0;iY