2011-10-22 2 views
4

2 차원 배열을 가지고이를 1D 배열로 변환하려고합니다.1D 배열 요소에 대한 가장 가까운 이웃 연산

2 차원 배열은 다음과 같습니다

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

1 차원 배열 :

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

나는를 얻을 수 있도록 내가 요소 번호 1 차원 배열의 6의 가장 가까운 이웃에 액세스하려면 어떻게

1 2 3 
5 6 7 
9 10 11 

(C++)과 같은 2D 배열에서 액세스 할 때와 같은 결과 ? 당신이 N 항목으로 M 항목 긴 키가 2 차원 배열이있는 경우

+1

산술 사용. 이전 인덱싱'm [1] [2]'새로운 인덱싱'm [1 * 4 + 2]'. (x-1) + 4 * (x-1) [x-1] [y-1] 1)], [x + 4 * (y-1)], [x + 1 + 4 * (y-1) 배열 너비에 대해 '4'를 대체하십시오. – user786653

+0

감사합니다. – taker

+0

논리는, 파이썬 코드를 읽는 데 신경 쓰지 않는다면 찾을 수 있습니다. [here] (http://stackoverflow.com/a/41880018/5496529) –

답변

3

, 당신은 M*N 요소가 1 차원 배열이 필요합니다.

요소 x의 이웃을 찾기 위해 노력 : 위의 솔루션은 바닥과 배열의 상단에 인접한뿐만 아니라 오른쪽 가장자리와 왼쪽 가장자리를 만드는

left(x) = (x - 1) % M 
right(x) = (x + 1) % M 
above(x) = (x - M) % (M * N) 
below(x) = (x + M) % (M * N) 

참고. 이를 제거하려면 모듈 수학을 생략하고 색인이 오른쪽/왼쪽/위쪽/아래쪽 가장자리를지나 이동했는지 감지하십시오.

+0

미안하지만 솔루션을 이해할 수 없습니다. 나에게 계몽 해 줄래? – taker

+0

배열 위치'x'를보고 있다면 왼쪽에있는 이웃은'x-1'에 있습니다. 오른쪽에있는 이웃은'x + 1'에 있습니다. 위의 이웃은'x-M'에 있습니다. 당신 아래의 이웃은'x + M'에 있습니다. 이것은 내려갈 때 수직 축이 증가한다고 가정합니다. 그것을 줄이려면, 위와 아래의 수학을 교환하십시오. 문자 그대로의 가장자리 경우입니다. 위쪽, 아래쪽, 왼쪽 또는 오른쪽 가장자리에 도달했을 때 어떻게 이웃을 처리하고 싶습니까? – ObscureRobot

관련 문제