2013-10-07 3 views
0

1 차원 배열로 표시된 N x N의 정사각형 2 차원 배열이 있다고 가정 해 봅니다. 아래처럼 배열을 5x5로 지정하면 배열의 값은 중요하지 않습니다.열 경계가있는 배열 탐색

std::vector<int> array { 
    0, 1, 2, 3, 4, 
    5, 6, 7, 8, 9, 
    0, 1, 2, 3, 4, 
    5, 6, 7, 8, 9, 
    0, 1, 2, 3, 4 
}; 

이 배열에 5 개의 행과 5 개의 열이 있다고하면 어떻게 행의 가장자리에 있는지 감지 할 수 있습니까? 예를 들어, 네 번째 행에 9가있는 색인에 있다면 행을 변경하지 않고 왼쪽으로 이동할 수 있음을 어떻게 알 수 있습니까? 그러나 오른쪽으로 이동하면 다음 행으로 넘어갑니다. 어떻게 가장자리에 대해 셀 이웃에 액세스 할 수 있습니까? 네 번째 행에있는 9의 색인에는 올바른 이웃이 없습니다. 경우

int index = row * num_cols + col 

하고있는 내가 현재 인덱스를 것이 작업을 수행하는 방법을 생각할 수

유일한 방법은, 아마도 가장자리에 있는지 확인 계수 (인덱스 % 5 == 0)를 사용 . 그러나 그것은 우리가 왼쪽이나 오른쪽으로 갈 수 있는지를 결정하지 못합니다.

답변

1

당신은 행과 열 인덱스를 얻을 수

int row = index/N; 
int col = index % N; 

를 사용할 수 있습니다. 예를 들어 9 번째 항목의 행 인덱스는 9/5 = 1이고 열 인덱스는 9 % 5 = 4입니다.

(row, col) 좌표를 계산하면 왼쪽 또는 오른쪽 이웃인지 확인할 수 있습니다. col == 0 일 때 왼쪽 이웃이 없습니다. col == N-1 일 때 올바른 이웃이 없습니다.

1

내 공식

int index = row * num_cols + col; 

올라가고 아래 num_cols 감산/가산 동일하다.

이 정확합니다. 그것의 반대는 당신이 때 왼쪽 가장자리에 (index % num_cols) == 0을 거 알아

int row = index/num_cols; 
int col = index % num_cols; 

입니다.

(index % num_cols) == num_cols-1 일 때 오른쪽 가장자리에 있다는 것을 알고 있습니다.