2013-04-28 96 views
2

我有一個列表,其中每個元素代表地圖中包含的所有平方米的整數的平均高度(一個數字=一平方米)。例如:使用洪水填充算法確定等高地圖區域

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) 

回答

3

你沒有做任何事情來「標記」您已經訪問過的區域,所以你一遍又一遍地做着同樣的區域,直到堆棧填滿。

這不是一個特別有效的洪水填充方式,所以如果你有大量的地帶,你最好找一個更有效的洪水填充算法(例如掃描線填充)。