java - Flood Fill 算法导致 StackOverFlowError

标签 java algorithm recursion flood-fill

我正在使用 Java 编写一个简单的绘图应用程序。我正在尝试使用 Flood Fill 算法的递归实现作为我的“桶填充”工具。

但是,这总是给我一个StackOverFlowError。 (无论我使用“桶填充工具”的区域有多小)。

编辑:更改代码以提高效率。仍然是同样的错误。

代码如下:

public void floodFill(int x, int y, Color targetColor, Color replacementColor) throws AWTException{

    pixelColor = robot.getPixelColor(x,y);

    g.setColor(replacementColor);
    g.fillRect(x, y, 1, 1);

    if(robot.getPixelColor(x-1, y).equals(targetColor))
        floodFill(x-1, y, targetColor, replacementColor);

    if(robot.getPixelColor(x+1, y).equals(targetColor))
        floodFill(x+1, y, targetColor, replacementColor);

    if(robot.getPixelColor(x, y-1).equals(targetColor))
        floodFill(x, y-1, targetColor, replacementColor);

    if(robot.getPixelColor(x, y+1).equals(targetColor))
        floodFill(x, y+1, targetColor, replacementColor);

}

我想知道是否有一种方法仍然可以对该算法使用递归,并且不会出现此错误。

如果不是,该算法有哪些可能的非递归实现,我可以在我的程序中使用?

最佳答案

您还必须检查已经设置的目标颜色,否则您会一次又一次地覆盖相同的目标颜色。

关于java - Flood Fill 算法导致 StackOverFlowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21864019/

相关文章:

使用 Executors.newCachedThreadPool 时 Java 驻留内存不断增长

java - 读取帖子请求值 HttpHandler

java - Hadoop map/reduce 显示错误 : com. mongodb.connection.SslSettings$Builder.context(Ljavax/net/ssl/SSLContext;)

string - 构建长度为 L 且恰好有 N 个回文的字符串

algorithm - 计算表达式长度而不计算表达式本身

java - ForkJoinPool 与普通递归

java - 使用JAVA按2个字段对文件中的行进行排序

搜索行星区域的算法

java - 扫雷递归,stackoverflow

javascript - 递归金三 Angular ,三 Angular 形逼近哪一点?