2014-09-18 5 views
0

여기에서 기본 논리를 이해하려고합니다. 예를 들어, 'n'은 무엇을 나타 냅니까? 이것이 어떻게 작동하는지 간단한 설명을 주면 좋을 것입니다.행렬을 90도 회전하는 방법을 이해하십시오.

public static void rotate(int[][] matrix, int n) { 
    for (int layer = 0; layer < n/2; ++layer) { 
     int first = layer; 
     int last = n - 1 - layer; 
     for(int i = first; i < last; ++i) { 
      int offset = i - first; 
      int top = matrix[first][i]; // save top 

      // left -> top 
      matrix[first][i] = matrix[last-offset][first];   

      // bottom -> left 
      matrix[last-offset][first] = matrix[last][last - offset]; 

      // right -> bottom 
      matrix[last][last - offset] = matrix[i][last]; 

      // top -> right 
      matrix[i][last] = top; // right <- saved top 
     } 
    } 
} 
+1

은'n'의 차 행렬의 크기이고, 그 다음 MA을 덮어 다음 PD 마침내 topD 값을 겹쳐 사용 P을 덮어이어서, 덮어 M. – gaborsch

+0

android와 (과) 어떤 관련이 있습니까? – Kiloreux

+0

은 n 열 또는 행의 크기입니까? – user3730244

답변

0

이 알고리즘에서, 요소 이동 내측가는 먼저 외부 요소를 가지고 : 여기서 코드이다.

이 행렬 (n = 4) 보자

A B C D 
E F G H 
I J K L 
M N O P 

우선, 사용자가 외부 요소 회전 : 다음

A -> D -> P -> M -> A 
B -> H -> O -> I -> B 
C -> L -> N -> E -> B 

을 거기 왼쪽 한 위치가, 내부 루프로 이동 :

F -> G -> K -> J -> F 

실제 회전은 첫 번째 e를 저장하기 위해 임시 변수를 사용합니다. 조망. 이 말을 해봅시다. A -> D -> P -> M -> A

A 값은 top 변수에 저장됩니다.

관련 문제