我有一些计算器问题,希望有人可以给我一些见解非/递归更少的解决方案。递归遍历数组问题
Ident[][] map = ...
private int explore(Ident item, int xcoord, int ycoord) {
if ((map[xcoord][ycoord] == null) || !map[xcoord][ycoord].equals(item))
return 0;
map[xcoord][ycoord] = null;
int sumX, sumY, counter = 1;
item.translate(xcoord, ycoord);
for (int y = -1; y <= 1; y++)
for (int x = -1; x <= 1; x++) {
sumX = x + xcoord;
sumY = y + ycoord;
if (((y != 0) || (x != 0)) && (sumX >= 0) && (sumX < map.length) &&
(sumY >= 0) && (sumY < map.[0].length))
counter += explore(item, sumX, sumY);
}
}
}
return counter;
}
此方法给出订货号对象的2维阵列,靶订货号和阵列内的起始位置。它递归地遍历数组 ,计算Ident占用的连续区域的大小。它还将输入的Ident项目放在该区域的中间。
通过经由图阵列循环,并呼吁任何非零元素的探索方法我可以构建在其区域为中心订货号项的数组,并用尺寸相对于它们的区域。
可以看出,用什么,但小地图,堆栈溢出。
任何人有完成相同的任务的替代方法是什么?或者一些见解来帮助我找到一个?
map [xcoord] [ycoord] = null; – 2009-06-10 21:45:21
糟糕。错过了。谢谢。修正了相关部分的答案。 – chaos 2009-06-10 21:50:50