2016-10-11 138 views
-3

我有矩陣,並且想要逆時針旋轉它。 例如:Java - 如何旋轉矩陣小於90度

1 2 3 4 
5 6 7 8 
9 10 11 12 
13 14 15 16 

become: 
2 3 4 8 
1 7 11 12 
5 6 10 16 
9 13 14 15 

這裏的旋轉是我到目前爲止已經完成的方法。結果(如下所示)是矩陣旋轉了90度;我希望能夠以這樣的方式旋轉,即外環上的物件只能移動一個位置。

int[][] rotateArray(int[][] m) { 
     int e = m.length - 1; 
     int c = e/2; 
     int b = e % 2; 
     for (int r = c; r >= 0; r--) { 
      for (int d = c - r; d < c + r + b; d++) { 
       int t = m[c - r][d]; 
       m[c - r][d] = m[d][e - c + r]; 
       m[d][e - c + r] = m[e - c + r][e - d]; 
       m[e - c + r][e - d] = m[e - d][c - r]; 
       m[e - d][c - r] = t; 
      } 
     } 

     return m; 
    } 

電流輸出

4 8 12 16 
3 7 11 15 
2 6 10 14 
1 5 9 13 

請幫幫忙,謝謝:)

+0

的可能的複製[陣列順時針旋轉](http://stackoverflow.com/questions/2799755/rotate-array-clockwise) – DimaSan

+0

您的矩陣不是2x2,我看不出輸出的明顯錯誤。什麼是實際問題? –

+0

對不起,我認爲這是不同的,想要90度旋轉,但我想更喜歡左移1 – sptra

回答

0

試試這個。

static final int[][][] ROT = { 
    {{1, 0}, {0, 0}, {0, 1}, {0, 2}}, 
    {{2, 0}, {2, 1}, {1, 1}, {0, 3}}, 
    {{3, 0}, {2, 2}, {1, 2}, {1, 3}}, 
    {{3, 1}, {3, 2}, {3, 3}, {2, 3}}, 
}; 

int[][] rotateArray(int[][] m) { 
    int[][] result = new int[m.length][m[0].length]; 
    for (int row = 0; row < m.length; ++row) 
     for (int col = 0; col < m[0].length; ++col) 
      result[ROT[row][col][0]][ROT[row][col][1]] = m[row][col]; 
    return result; 
} 

而且

int[][] m = { 
     { 1, 2, 3, 4}, 
     { 5, 6, 7, 8}, 
     { 9, 10, 11, 12}, 
     {13, 14, 15, 16}, 
    }; 
    int[][] rotated = rotateArray(m); 
    for (int[] row : rotated) 
     System.out.println(Arrays.toString(row)); 

結果:

[2, 3, 4, 8] 
[1, 7, 11, 12] 
[5, 6, 10, 16] 
[9, 13, 14, 15] 
+0

哇謝謝,但你能解釋爲什麼你把靜態變量「ROT」在那裏?爲什麼ROT的價值是這樣的?非常感謝你 – sptra

+0

'ROT'顯示每個元素的目的地。例如,'m [0] [0]'必須轉到'result [1] [0]','m [0] [1]'必須轉到'result [0] [0]'等等。 – saka1029