1

我认为我需要一种称为“触摸”的方法(如连续的,而不是情感的)。我需要识别矩阵中靠近单个元素或一组元素的元素。至少这是我想到的解决手头问题的方式。

下面程序中的矩阵 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
4

1 回答 1

0

仅检查当前暴露区域周围的点听起来并不像它可以涵盖所有情况 - 如果下一个要暴露的点是新岛屿的开始怎么办?

我会这样做:有另一个数组 - 我们称它为sorted包含按高度排序的点。每次提高水位时,将所有高于新水位的元素弹出并sorted弹出atlantis

事实上,如果你这样做,就不需要单独的sorted和数组。只需存储不atlantis高于水面的最高点的索引,您就可以将两个数组合二为一——一侧在水面以上,另一侧在水面以下。

希望有帮助!

于 2012-07-27T03:38:01.217 回答