我现在正在做一个程序,它利用了floodfill递归(比如用不同的颜色填充一个白色的圆圈和黑色的边框)。当我点击我的图像来填充时,只有部分圆圈会被填充成不同的颜色,然后我就会得到递归错误。我的代码中唯一有递归的部分是这样的。
def floodfill(x,y):
floodfill(x+1,y)
floodfill(x-1,y)
floodfill(x, y+1)
floodfill(x, y-1)
发布于 2018-06-18 00:42:56
要做到这一点,不能使用递归;对于半径与递归限制匹配的圆,会遇到递归限制,默认为1000,并且不能任意提高限制。相反,使用迭代方法。您可以在此处使用队列执行此操作:
from collections import deque
def floodfill(x, y, _directions=((-1, 0), (0, -1), (1, 0), (0, 1))):
queue = deque([(r, c)])
handled = {(r, c)}
while queue:
r, c = queue.popleft()
for dr, dc in _directions:
nr, nc = r + dr, c + dc
if (nr, nc) not in handled:
handled.add((nr, nc))
queue.append((nr, nc))
# do something with these coordinates, like filling
# this position in an image.
我在这里使用了一个集合来跟踪尚未处理的坐标;您的应用程序可能有更简单的方法来做同样的事情(例如,简单地测试填充颜色是否已经应用于该像素)。
https://stackoverflow.com/questions/50898564
复制相似问题