我认为我需要一种称为“触摸”的方法(如连续的,而不是情感的)。我需要识别矩阵中靠近单个元素或一组元素的元素。至少这是我想到的解决手头问题的方式。
下面程序中的矩阵 State 表示,比如说,一些水下地形。当我降低水位时,最终最高点会伸出并成为一个“岛屿”。当“水位”为 34 时,元素 State[2,3] 是该岛的单点。数组 atlantis 保存了该单点的坐标。
随着我们进一步降低水位,额外的点将“高于水面”。额外的连续点将成为岛屿的一部分,它们的坐标将被添加到数组亚特兰蒂斯。(例如,下一块成为亚特兰蒂斯一部分的土地将是位于 31 的州 [3,4]。)
我对如何做到这一点的想法是识别所有接触/靠近亚特兰蒂斯元素的矩阵元素,找到具有最高海拔的元素,然后将其添加到数组亚特兰蒂斯。寻找单个元素旁边的元素本身就是一个挑战,但我们可以编写一些代码来检查集合 [i,j-1], [i,j+1], [i-1,j-1] , [i-1,j], [i-1,j+1], [i+1,j-1], [i+1,J], [i+1,j+1]。(我想我是对的。)
但是随着我们添加额外的点,确定哪些点围绕着亚特兰蒂斯点的任务变得越来越困难。所以这就是我的问题:谁能想到任何机制来做到这一点?任何使用我不知道的红宝石功能的简化算法?(包括除了最基本的之外的所有方法。)如果可以编写这样的方法,那么我可以编写 atlantis.touching 并获取一个数组,例如,包含当前与亚特兰蒂斯相邻的所有点的所有坐标。
至少我认为这是可以做到的。欢迎任何其他想法。如果有人知道任何类型的合作网站,我可以在其中寻找可能有兴趣与我合作的其他人,那就太好了。
# 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