【发布时间】:2012-10-19 02:49:45
【问题描述】:
我需要编写一个洪水填充算法,以便在更大的代码中使用,该代码根据洞穴所在的房间用不同颜色的水填充洞穴的特定单元。
由于某种原因,我的递归算法不起作用,并一直告诉我超出了最大递归深度,我不知道为什么。
我正在尝试逐个单元格地检查它是 AIR、STONE 还是 WATER,如果是 STONE 或 WATER,我希望它什么也不做。如果是 AIR,我希望它填充该单元格。
谁能给我一些提示或建议?
#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)
【问题讨论】:
-
这确实是最好的迭代而不是递归。它会更快更高效
-
@jozefg:实现一个正确的fast洪水填充算法不是很困难吗?
-
行和列是有符号还是无符号?
-
@user946850 true... 虽然广度优先搜索版本更节省空间并且还避免了递归。只需使用队列而不是调用堆栈
标签: algorithm recursion fill flood-fill