使用洪水填充算法确定高度相等的地图区域

时间:2013-04-28 00:31:12

标签: python recursion flood-fill

我有一个列表列表,其中每个元素代表地图中包含的所有平方米的整数的平均高度(一个数字=一平方米)。例如:

map=[
  [1,1,1,1],     
  [1,1,2,2],
  [1,2,2,2]
           ] # where 1 and 2 are the average heights of those coordenates.

我正在尝试实现一种方法,给定一个位置查找他周围具有相同高度的区域。让我们称他们为'平坦区域'。 我在泛洪填充算法中找到了一个解决方案。但是,在编写代码时我遇到了一些问题。我得到了

 RuntimeError: maximum recursion depth exceeded

我不知道我的问题出在哪里。这是函数的代码:

def zona_igual_alcada(self,pos,zones=[],h=None):
    x,y=pos
    if h==None:
        h=base_terreny.base_terreny.__getitem__(self,(x,y))
    if base_terreny.base_terreny.__getitem__(self,(x,y))!=h:
            return
    if x in range(0,self.files) and y in range(0,self.columnes):
        if base_terreny.base_terreny.__getitem__(self,(x,y))==h:
            zones.append((x,y))
            terreny.zona_igual_alcada(self,(x-1,y),zones,h)
            terreny.zona_igual_alcada(self,(x+1,y),zones,h)
            terreny.zona_igual_alcada(self,(x,y-1),zones,h)
            terreny.zona_igual_alcada(self,(x,y+1),zones,h)
    return set(zones)

1 个答案:

答案 0 :(得分:3)

你没有做任何事情来“标记”你已经访问过的区域,所以你一遍又一遍地做同样的区域,直到堆栈填满。

这不是一种特别有效的洪水填充方法,因此如果您有大量区域,最好寻找更有效的算法来进行洪水填充(例如扫描线填充)。 / p>