2012-11-20 205 views
2

我有下面的代碼似乎旋轉矩陣左90度......但我後來旋轉它的權利不離開:D嘗試改變它,但不斷弄亂東西了... ...向右旋轉2d陣列

public static int[,] RotateMatrix(int[,] matrix, int n) 
    { 
     int[,] ret = new int[n, n]; 

     for (int i = 0; i < n; ++i) 
     { 
      for (int j = 0; j < n; ++j) 
      { 
       ret[i, j] = matrix[n - j - 1, i]; 
      } 
     } 

     return ret; 
    } 

我該如何旋轉它?

回答

4

嗯,其實所示的代碼片段把它順時針方向(即,向右)......但如果你想在另一個方向走,只是交換座標:

ret[i, j] = matrix[j, n - i - 1]; 

它實際上相當容易,如果你想一下。讓我們想象一下,你有這樣的4x4矩陣:

===========================> 
| 0,0 | 0,1 | 0,2 | 0,3 | J 
| 1,0 | 1,1 | 1,2 | 1,3 | 
| 2,0 | 2,1 | 2,2 | 2,3 | 
| 3,0 | 3,1 | 3,2 | 3,3 | 
========================= 
| I 
V 

而現在,而不是單位矩陣旋轉,繞其中心軸線:

<=========================== 
I | 0,0 | 0,1 | 0,2 | 0,3 | 
    | 1,0 | 1,1 | 1,2 | 1,3 | 
    | 2,0 | 2,1 | 2,2 | 2,3 | 
    | 3,0 | 3,1 | 3,2 | 3,3 | 
    ========================= 
         J | 
          V 

看看會發生什麼?垂直的一個保持不變,它只是改變了它的名字(從I到J)。水平的不僅改變了它的名字,而且還轉到了另一邊:這正是n - j - 1公式所表達的。 )

而完全相同的思維技巧將幫助您理解逆時針旋轉矩陣的公式。 )