我想我需要一種名爲「觸摸」的方法(如在連續的,不感性的) 我需要識別矩陣的那些元素緊挨着一個單獨的元素或一組元素。至少這是我想要解決手頭問題的方式。需要一種Ruby方法來確定矩陣「觸摸」另一個元素的元素
下面的程序中的矩陣狀態代表,比方說,一些水下地形。當我放下水時,最高點最終會突出併成爲「島嶼」。當「水位」在34時,元素狀態[2,3]是該島的單個點。數組atlantis保存該單點的座標。
隨着我們進一步降低水位,附加點將位於「水上」。其他連續點將成爲島的一部分,並且它們的座標將被添加到數組atlantis。 (例如,亞特蘭蒂斯的下一塊土地將是國家[3,4]在31)。
我想過如何做到這一點是識別所有的矩陣元素觸摸/旁邊在亞特蘭蒂斯的元素,找到最高的那個,然後將它添加到數組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],[i + 1,j + 1] (我想我說得對。)
但是,隨着我們增加附加點,確定圍繞亞特蘭蒂斯點的哪些點變得越來越困難。所以這是我的問題:任何人都可以想到任何這樣做的機制?任何一種使用我不知道的ruby功能的簡化算法? (其中包括除最基本以外的所有內容)。如果可以編寫這樣的方法,那麼我可以編寫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達到預設尺寸,我將「刪除」它,並在剩下的下一個最高點重複相同的過程。排序有可能,但需要考慮。 – user918069 2012-07-27 12:13:56
儘管排序可能有用,但它本身並不能解決問題。我需要找到既高又連續的點。 – user918069 2012-07-28 01:48:12
@ user918069 - 查看[A *算法](https://en.wikipedia.org/wiki/A*)。它通常用於路徑查找,但是通過一些調整,它會給你一個最高連續點的列表。不過,你必須提供出發點。 – 2012-07-29 00:21:54