我有一些計算器問題,希望有人可以給我一些見解非/遞歸更少的解決方案。遞歸遍歷數組問題
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