자바 구현 인쇄 나선형 행렬 알고리즘 예제

본 논문 의 사례 는 자바 가 실현 하 는 인쇄 나선형 행렬 알고리즘 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
N 단계 행렬 은 시계 방향 으로 나선형 이 고 아래 의 행렬 과 같다.

사고:2 차원 배열 로 데 이 터 를 저장 하고 배열 은 0 으로 초기 화 되 며 배열 은 모두 n 제곱 개의 요소 가 있 습 니 다.1 부터 시작 하기 때문에 요소 의 값 은 1 에서 n 까지 입 니 다.×n。위의 노선 에 따라 1 부터 데 이 터 를 한 번 씩 옮 겨 다 니 며 데 이 터 를 채 울 때마다 경계 와 방향 을 판단 합 니 다(설명,임의의 길이 와 너 비 는 이 방향 을 사용 할 수 있 습 니 다.본 예 는 N*N 의 행렬 설명 을 사용 합 니 다).코드 가 바로 올 라 갑 니 다:

package study.haishen.com;
/**
 * @author Administrator
 *
 */
public class SpiralMatrix {
    /**
     * @param n n 
     * @return
     */
    public int[][] createMatrix(int n)
    {
        int[][] matrix = new int[n][n];//n*n     ,       0
        int right = 1, down = 2, left = 3, up = 4;//            
        int direction = right;
        int numb = n * n;//n   ,  n×n  
        int i = 0, j = 0;
        for (int p = 1; p <= numb; p++)
        {
            matrix[i][j] = p;
            //         
            if(direction == right)
            {
                //                       ,    ,        
                if (j + 1 < n && matrix[i][j + 1] == 0)
                {
                    j++;
                } else {//        ,             ,       ,        
                    i++;
                    direction = down;
                    continue;
                }
            }
            //         
            if (direction == down)
            {
                //                       ,    ,        
                if (i + 1 < n && matrix[i + 1][j] == 0)
                {
                    i++;
                } else {//       ,             ,       ,        
                    j--;
                    direction = left;
                    continue;
                }
            }
            //         
            if (direction == left)
            {
                //                       ,    ,        
                if (j - 1 >= 0 && matrix[i][j - 1] == 0)
                {
                    j--;
                } else {//       ,             ,       ,        
                    i--;
                    direction = up;
                    continue;
                }
            }
            //         
            if (direction == up)
            {
                //                       ,    ,        
                if (i - 1 >= 0 && matrix[i - 1][j] == 0)
                {
                    i--;
                } else {//       ,             ,       ,        
                    j++;
                    direction = right;
                    continue;
                }
            }
        }
        return matrix;
    }
    /**
     *   
     * @param args
     */
    public static void main(String[] args) {
        int n = 10;
        SpiralMatrix s = new SpiralMatrix();
        int[][] data = s.createMatrix(n);
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                System.out.print(data[i][j] + " ");
            }
            System.out.println();
        }
    }
}

실행 결과:

자바 알고리즘 과 관련 된 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기