我得到了以下地图
local Map = {
[1] = {
[1] = 'Sand',
[2] = 'Sand',
[3] = 'Sand'
},
[2] = {
[1] = 'Sand',
[2] = 'Sand',
[3] = 'Grass'
},
[3] = {
[1] = 'Rock',
[2] = 'Rock',
[3] = 'Grass'
},
}
上面的地图:
S = Sand
G = Grass
R = Rock
S S R
S S R
S G G
并尝试创建一个我提供点的函数,它返回一个包含该类型的所有可能矩形的数组。
像
这样的东西function GetRectangles(X, Y)
local Type = Map[X][Y]
local Result = {}
-- Get all rectangles with same type and add to array
return Result
end
所以,当我调用GetRectangles(1,1)时,它会返回一个包含以下矩形的数组
当我调用GetRectangles(3,3)时,它会返回一个包含以下内容的数组
我该怎么做?
答案 0 :(得分:1)
考虑回溯。
recursive step:
for each step in possible steps:
check new rectangle for single type
if ok, add to rectangle list and recurse
可能的步骤是:向左添加1列,向右添加1列,在上方添加1行,在下方添加1行。
示例:
current rectangle (1,1), (1,1)
rectangle is ok
add 1 row below:
current rectangle (1,1), (1,2)
rectangle is ok, add
add 1 row below
current rectangle (1,1) (1,3)
rectangle ok, add
// add 1 row below not possible step
add 1 column left
rectangle (1,1) (2,3) not ok
no more steps
add 1 column left
rectangle (1,1) (2,1) not ok
no more steps
etc...
表示重叠,迭代列表并删除它们或提示:这可以在迭代期间完成。