2

各要素がマップに含まれるすべての平方メートルの整数の平均高さを表すリストのリストがあります(1つの数値= 1平方メートル)。例えば:

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)
4

1 に答える 1

3

すでに訪れたゾーンを「マーク」するために何もしていないので、スタックがいっぱいになるまで同じゾーンを何度も繰り返しています。

これはフラッド フィルを行うのに特に効率的な方法ではないため、多数のゾーンがある場合は、フラッド フィルを行うためのより効率的なアルゴリズム (スキャンライン フィルなど) を探す方がよいでしょう。

于 2013-04-28T00:38:09.283 に答える