Algorithm 递归洪水填充算法

Algorithm 递归洪水填充算法,algorithm,recursion,fill,flood-fill,Algorithm,Recursion,Fill,Flood Fill,我需要编写一个洪水填充算法,用于更大的代码中,根据洞穴所在的房间,用不同颜色的水填充洞穴的特定单元 出于某种原因,我的递归算法不起作用,一直告诉我我超过了最大递归深度,我不知道为什么 我试着一个细胞一个细胞地检查它是空气、石头还是水,如果是石头还是水,我希望它什么也不做。如果是空气,我想让它充满那间牢房 有人能给我一些提示或建议吗 #flood fill algorithm def fill(cave, row, col, color): caveWidth = len(cave)

我需要编写一个洪水填充算法,用于更大的代码中,根据洞穴所在的房间,用不同颜色的水填充洞穴的特定单元

出于某种原因,我的递归算法不起作用,一直告诉我我超过了最大递归深度,我不知道为什么

我试着一个细胞一个细胞地检查它是空气、石头还是水,如果是石头还是水,我希望它什么也不做。如果是空气,我想让它充满那间牢房

有人能给我一些提示或建议吗

#flood fill algorithm
def fill(cave, row, col, color):

    caveWidth = len(cave)
    caveHeigth = len(cave[0])


    if row > 0:
        fill(cave, row-1, col, color) #left
    if col > 0:
        fill(cave, row, col-1, color) #up
    if row < caveWidth-1:
        fill(cave, row+1, col, color) #right
    if col < caveHeigth-1:
        fill(cave, row, col+1, color) #down

    if cave[row][col] == STONE or cave[row][col] == WATER:
        return

    if cave[row][col] == AIR : 
        cave[row][col] = WATER
        grid.fill_cell(row, col, color)
#洪水填充算法
def填充(洞穴、行、柱、颜色):
caveWidth=len(洞穴)
caveHeigth=len(cave[0])
如果行>0:
填充(洞穴,第一排,山柱,颜色)#左侧
如果列>0:
填充(洞穴、行、列1、颜色)#
如果行
fill
例程开始时打印
,查看此处的错误。代码重新排序就可以了:-)

不要使用递归算法,它们是魔鬼的玩物


维基百科列出了各种实用的算法,如扫描线填充。

这确实是迭代而不是递归的最佳方法。它会更快,更多efficient@jozefg:实现正确的快速洪水填充算法不是很困难吗?行和列是有符号的还是无符号的?@user946850 true。。。尽管广度优先的搜索版本更节省空间,也避免了递归。简单地使用队列而不是调用堆栈递归是解决许多实际问题的非常有用的工具。甚至扫描线填充通常也是作为递归解决方案实现的,使用显式堆栈而不是线程的堆栈。@Tylerduden:那么什么是函数语言呢?邪恶的化身?;-)