"감동"이라고하는 메서드가 필요합니다. (인접하지 않고 감정적 인 것처럼) 매트릭스의 요소를 식별해야합니다. 개별 요소 또는 요소 집합 옆에 표시됩니다. 적어도 내가 당면한 문제를 해결하기 위해 생각한 방식이다.매트릭스 요소를 결정하기 위해 루비 방법이 필요합니다.
아래의 프로그램에서 행렬 상태는 수중 지형을 나타냅니다. 내가 물을 내리면 결국 가장 높은 지점이 튀어 나와서 "섬"이됩니다. "수위"가 34 일 때 원소 상태 [2,3]가 섬의 단일 지점입니다. 배열 atlantis는 단일 점의 좌표를 유지합니다.
수위를 더 낮추면 추가 포인트가 "물 위"가됩니다. 추가 인접 포인트는 섬의 일부가되며 좌표가 배열 atlantis에 추가됩니다. (예를 들어, 아틀란티스의 일부가 될 다음 토지는 31 번 주입니다.)
내 생각에이 방법은 옆에있는 모든 행렬 요소를 식별하기위한 것입니다. atlantis의 요소를 찾은 다음 가장 높은 고도를 가진 요소를 찾은 다음 배열 atlantis에 추가합니다. 단일 요소 옆에있는 요소를 찾는 것은 그 자체로 문제이지만 집합 [i, j-1], [i, j + 1], [i-1, j-1]을 검사 할 수있는 코드를 작성할 수 있습니다. [i-1, j], [i-1, j + 1], [i + 1, j-1], [i + 1, J] (내가 맞다고 생각해.)
그러나 우리가 추가로 포인트를 추가함에 따라, 어떤 포인트가 아트런티에서 포인트를 둘러 쌈을 결정하는 작업이 점점 더 어려워지고 있습니다. 그래서 그것은 제 질문입니다. 누구든지이 작업을 수행 할 수있는 메커니즘을 생각할 수 있습니까? 루비의 기능을 사용하는 모든 종류의 단순화 된 알고리즘은 내가 모르고 있습니까? (가장 기본적인 것을 제외한 모든 것을 포함합니다.) 그런 방법이 쓰여질 수 있다면, 필자는 atlantis.touching을 작성하고, 예를 들어 atlantis에 인접한 모든 점의 모든 좌표를 포함하는 배열을 얻을 수 있습니다.
적어도 이것이 내가 할 수 있다고 생각하는 방법입니다. 다른 아이디어라도 환영합니다. 누군가가이 사이트에서 저와 함께 일하는 데 관심이있는 다른 사람들을 찾을 수있는 파트너 사이트를 알고 있다면 그것은 좋을 것입니다.
# create State database using matrix
require 'matrix'
State=Matrix[ [3,1,4,4,6,2,8,12,8,2],
[6,2,4,13,25,21,11,22,9,3,],
[6,20,27,34,22,14,12,11,2,5],
[6,28,17,23,31,18,11,9,18,12],
[9,18,11,13,8,9,10,14,24,11],
[3,9,7,16,9,12,28,24,29,21],
[5,8,4,7,17,14,19,30,33,4],
[7,17,23,9,5,9,22,21,12,21,],
[7,14,25,22,16,10,19,15,12,11],
[5,16,7,3,6,3,9,8,1,5] ]
#find sate elements contiguous to island
atlantis=[[2,3]]
find all state[i,j] "touching" atlantis
다른 지점이 인접한 영역에 집중해야하는 다른 섬 (또는 나중에 atlantis와 병합)이 될 수 있기 때문입니다. atlantis가 미리 설정된 크기에 도달하면, 나는 그것을 "제거"하고 다음으로 높은 지점에서 동일한 과정을 반복합니다. 정렬 된 가능성이 있지만, 그것에 대해 생각할 필요가 있습니다. – user918069
정렬은 유용 할 수 있지만 그 자체로는 문제를 해결할 수 없습니다. 나는 높고 인접한 포인트를 찾아야한다. – user918069
@ user918069 - [A * 알고리즘] (https://en.wikipedia.org/wiki/A*)을 확인하십시오.일반적으로 경로를 찾는 데 사용되지만 몇 번의 조작으로 가장 높은 연속 점 목록을 제공합니다. 그래도 출발점을 제공해야합니다. –