2016-07-20 3 views
-1

하나의 요소가 매트릭스에 인접한 요소를 참조 할 수 있도록 일부 코드를 작성하려고합니다. 게임 조각을 인접한 공간으로 옮길 수있는 것과 같습니다. 예를 들어, 다음과 같이 말하고 싶습니다.매트릭스의 인접 요소를 어떻게 참조합니까?

if x matrix element is adjacent to y element: 
    y_element_adjacent = True 

'이 인접 부분'을 수행하는 방법을 알고 싶습니다.

편집 : 목록을 만들고 각 요소에 번호를 할당 해 보았습니다. 따라서 100 요소 목록 (또는 10x10 게임 보드)에서 공간 1x1은 0 번째 요소이고 공간 1x3은 2 번째 요소가됩니다 ... 이와 같이 :

1, 2, 3, 4, 5, 6 7, 8, 9, 10

11, 12, 13, 14, 15, 16, 17, 18, 19,

그러나, 이것에 대한 문제는 20

그 X 원소가 10 인 경우, 내 코드는 인접한 공간을 찾기 위해 + 1을 취하고, 11은 인접하지 않습니다. 그런 다음 목록이 올바른 방법이 아니며 행렬이 갈 길이 란 것을 깨달았습니다. 나는 목록과 다르게 사용할 수있는 방법에 대해 조금 혼란스러워합니다.

도움을 주시면 감사하겠습니다. 감사.

+1

이 작업을 수행하는 많은 방법에는 여러 가지 방법 코드에 따라 있습니다 조직됩니다. 당신이 갖고있는 것에 대해 더 구체적으로 말할 수 있습니까? 그리고 더 중요한 것은 -이 질문을하기 전에 스스로 시도한 것입니까? – TigerhawkT3

+0

그냥 네 이웃을 모두 가져 가라. (x는 +1과 -1 색인, y-> 2 * 2 빗은 똑같이, 대각선이 * 인접 *이면 8). 그러나 인덱싱하기 전에 범위 내에서 확인하십시오 (x + 1 = 0; y + 1 = 0) – sascha

+0

주석 주셔서 감사합니다. 내 원래의 생각 과정으로 편집. – Jerfy

답변

0

다음은 인접한 모든 요소의 색인을 얻는 간단한 방법입니다. x,y = (1,1)의 입력 용

from itertools import product, starmap 

x, y = (x_coordinate, y_coordinate) # matrix values here 
cells = starmap(lambda a,b: (x+a, y+b), product((0,-1,+1), (0,-1,+1))) 

,이 (list(cells)[1:])[(1, 0), (1, 2), (0, 1), (0, 0), (0, 2), (2, 1), (2, 0), (2, 2)] 함유 반환한다.

이러한 구현은 특정 시나리오 (특정 게임 조각이 이동할 수있는 위치 결정)에서 중요 할 수 있습니다. 당신이 국경 검사를 포함 할 경우 여기에서 찾을 수있다 (이러한 및 소스)

X = max_board_X 
Y = max_board_Y  
neighbors = lambda x, y : [(x2, y2) for x2 in range(x-1, x+2) 
            for y2 in range(y-1, y+2) 
            if (-1 < x <= X and 
             -1 < y <= Y and 
             (x != x2 or y != y2) and 
             (0 <= x2 <= X) and 
             (0 <= y2 <= Y))] 

다른 솔루션을 시도 할 수 있습니다 : Determining neighbours of cell two dimensional list

+0

감사합니다. 이것은 꽤 도움이됩니다! – Jerfy

관련 문제