gpt4 book ai didi

java - 如何找到具有相同值的所有相邻像素而不遇到当前的 StackOverflowError 问题?

转载 作者:行者123 更新时间:2023-12-01 12:24:42 24 4
gpt4 key购买 nike

我正在开发一个项目,我需要找到具有相同值(true)的 boolean 数组的所有相邻“像素”。我正在使用二维数组,因此我使用递归方法来获取像素并检查其周围的每个像素,然后对每个成功的像素运行相同的函数。我递归得太深了,Java 不喜欢它。我该如何以不同的方式处理这个问题?

public static List<Vertex> searchToAdd(int x, int y, List<Vertex> pixelMass, boolean[][] pool)
{
pixelMass.add(new Vertex(x, y));
boolean valueToMatch = pool[x][y];

if(pool[x+1] [y] == valueToMatch) pixelMass = searchToAdd(x+1, y, pixelMass, pool);
if(pool[x] [y+1] == valueToMatch) pixelMass = searchToAdd(x, y+1, pixelMass, pool);

if(x-1 >= 0)
{
if(pool[x-1][y] == valueToMatch) pixelMass = searchToAdd(x-1, y, pixelMass, pool);
}

if(y-1 >= 0)
{
if(pool[x][y-1] == valueToMatch) pixelMass = searchToAdd(x, y-1, pixelMass, pool);
}

return pixelMass;
}

如果需要更多我的代码,请随时询问。

最佳答案

两个观察结果,首先,您可以将 pixelmass 声明为静态列表,而不是将其作为函数参数传递吗?这将节省大量的堆栈空间。其次,似乎没有任何尝试来阻止在已检查过的像素上进行递归。仅当没有相邻像素(即没有邻居的单个像素)时,递归才会终止。否则递归将找到原始像素,并调用自身直到堆栈溢出。解决这个问题的一种方法是检查你的 list 。更好的方法是维护另一个 boolean 数组,标记已递归的像素。

// ...
pixelMass.add(new Vertex(x, y));
done[x][y] = 1;
boolean valueToMatch = pool[x][y];

if(pool[x+1][y] == valueToMatch && done[x+1][y] == 0)
pixelMass = searchToAdd(x+1, y, pixelMass, pool);
// etc.

关于java - 如何找到具有相同值的所有相邻像素而不遇到当前的 StackOverflowError 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26453831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com