Skip to main content
 首页 » 编程设计

python之使用flood fill算法确定等高 map 区域

2024年08月29日43wayfarer

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

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

我正在尝试实现一种方法,给定一个位置,寻找他周围具有相同高度的区域。我们称它们为“平坦区域”。 我在 flood-fill 算法中找到了解决方案。但是,在编写代码时我遇到了一些问题。我得到一个

 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) 

请您参考如下方法:

您没有做任何事情来“标记”您已经访问过的区域,因此您会一遍又一遍地执行相同的区域,直到堆栈填满。

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