2017-05-19 15 views
0

내 과제에 어려움을 겪고 있으며 도움이 필요합니다.C - 2 차원 배열 바깥 쪽 (중심에서 시작) 및 시계 방향으로 나선형 방향 이동

2 차원 배열 A [N] [N] (여기서 N은 자연수로 1에서 N^2까지 채우지 만 트래버스 알고리즘은 내가 고민하는 것입니다.)에서 N (A [N/2] [N/2])에서 시작하여 나선형으로 그리고 시계 방향으로 움직이는 홀수 (1,3,5,7 ...)입니다.

예 (N = 5) :

25 10 11 12 13 
24 9 2 3 14 
23 8 1 4 15 
22 7 6 5 16 
21 20 19 18 17 

I 패턴 참조 : 센터 = 1; 1xUP, 1xRIGHT, 2xDOWN, 2xLEFT, 3xUP, 3xRIGHT 등 ...

어떻게이 알고리즘을 루프로 구현할 수 있습니까? 시간이 갈수록 여기에 붙어 있습니다 ...

몇 가지 제안 사항을 읽고 도움을 드리겠습니다.

감사합니다.

+0

그래,이 코드를 보았지만 중심에서 시작하여 수직으로 올라간 다음 나선형 및 시계 방향으로 계속 코드를 편집해야합니까? 그것은 투쟁입니다. 편집 : 색인 [0] [0] (행렬의 시작 부분)부터 시작하여 나선형 및 시계 방향 순회를위한 코드도 있습니다. 나는 현재 그것을 연구 중이므로 내부에서 빠져 나간다. 나는이 코드를 여기에 붙여 넣을 수 있으며, 가능하다면 : 팁을 다시 작성하는 방법을 알려주세요. – Waterfalse

+0

당신은 또한 이것을 위해 사각형 커널을 사용할 수 있습니다 (원형 'cos, sin' 대신). [2D 3 x 3 격자의 회전 대각선 - 회전 행렬 필요?] (http://stackoverflow.com/a/40355825/) 2521214) 그래서 매트릭스 중심에서 바깥 가장자리까지 사각형을 반복하십시오 ... 동심원 렌더링과 비슷합니다. – Spektre

답변

0

당신은 같은 구현하고 여기에 첫 번째 단계의 변화 방향을 사용할 수 있습니다 Print 2-D Array in clockwise expanding spiral from center

int x = 0; // current position; x 
int y = 0; // current position; y 
int d = 0; // current direction; 0=RIGHT, 1=DOWN, 2=LEFT, 3=UP 
int c = 0; // counter 
int s = 1; // chain size 

int d 것은 - 현재의 방향; 3으로 변경하십시오.

+1

감사합니다. @knst! 지금이 방법을 사용하고 있으며 거의 ​​작동합니다. 제대로 작동하려면 약간의 작업이 필요합니다. 내가 끝내면 여기에 쓸 것입니다! – Waterfalse

+0

글쎄, 나는 그런 식으로 만들었지 만 남아있는 유일한 문제는 순회 (좌표 [0] [0] 인 요소)의 마지막 요소에 도달하지 못했다는 점입니다. 예 : N = 5, 원하는대로 행렬을 채우지 만 마지막 요소 (행렬 [0] [0])는 N^2 = 25 대신 임의의 값을 갖습니다. – Waterfalse

+0

(int k = 1; k <= (size-1); k ++)에 대한 j ++) 정확히 용도는 무엇입니까? – Waterfalse