Lua 如何在网格中找到最小数量的开放矩形?

Lua 如何在网格中找到最小数量的开放矩形?,lua,a-star,Lua,A Star,我有一个10x10的网格,由4x4个开放和闭合正方形组成(对不起,无法发布小于10个重复点的图片) 每个节点都有一个向量2的位置,我使用了一些方法,但似乎找不到最有效的方法。我试着在每一行中循环并连接打开的节点,这是可行的,但效率并不如它所能做到的那么高。它需要在X和Z坐标下工作 下面是低效的伪代码: GetCells = function(row1) local continuum = {} repeat for i = 1, #grid[row1] do

我有一个10x10的网格,由4x4个开放和闭合正方形组成(对不起,无法发布小于10个重复点的图片)

每个节点都有一个向量2的位置,我使用了一些方法,但似乎找不到最有效的方法。我试着在每一行中循环并连接打开的节点,这是可行的,但效率并不如它所能做到的那么高。它需要在X和Z坐标下工作

下面是低效的伪代码:

GetCells = function(row1)
   local continuum = {}
   repeat
       for i = 1, #grid[row1] do
           local start = grid[row1][1]
           local s = {}
           if start == open then check right.
               if right == open then
                   start = right
                   etc...
                   table.insert(s, start)
               else
                   stop = true
               end
           end
           table.insert(continuum, s)
       end
   until stop == true
   return continuum
end

否则我会怎么做呢?

您是否只想删除每行中从最左边的闭合节点开始的所有节点?我只是想创建一个最大的矩形,可以容纳在打开的节点之间。在第5行和第6行中,将有一个矩形,即2x5。代码的输入是什么:Lua值已准备好使用,还是只需要对文本文件进行一些解析?为什么计算方法效率低下?文本文件。我认为它效率低下,因为它创建了大量的矩形。我的代码在第5行和第6行中创建了两个单独的1x5矩形,我希望它只创建一个2x5。我只是想知道是否有一种算法可以用来代替我自己的算法。
GetCells = function(row1)
   local continuum = {}
   repeat
       for i = 1, #grid[row1] do
           local start = grid[row1][1]
           local s = {}
           if start == open then check right.
               if right == open then
                   start = right
                   etc...
                   table.insert(s, start)
               else
                   stop = true
               end
           end
           table.insert(continuum, s)
       end
   until stop == true
   return continuum
end