【发布时间】:2014-05-08 07:30:45
【问题描述】:
我写了一个经典的队列floodfill:
public static void floodFill(int y, int x, byte originalvalue, byte newvalue, byte[][] arr) {
Deque queue = new ArrayDeque();
queue.add(new int[]{y, x});
while (!queue.isEmpty()) {
int[] t = (int[]) queue.poll();
y = t[0];
x = t[1];
if (arr[y][x] == originalvalue) {
arr[y][x] = newvalue;
for (int i = 0; i < 8; i++) {
if (x + dx[i] < arr[0].length && y + dy[i] < arr.length && x + dx[i] > -1 && y + dy[i] > -1 && arr[y + dy[i]][x + dx[i]] == originalvalue) {
queue.add(new int[]{y + dy[i], x + dx[i]});
}
}
}
}
}
现在我想写扫描线Flood Fill,这要快得多。找不到伪代码,看不懂this code。
你能帮我优化我的洪水填充或写第一行扫描吗?
我称这种填充方式为大小为 1000-2000 x 1000-2000(不一定是正方形)的字节数组,大区域一次,然后大约 1000 到 1,000,000 次小区域。
【问题讨论】:
-
扫描线,不是天际线!
-
@YvesDaoust 谢谢你,我的错。
-
这解释了为什么你没有找到这个算法的痕迹。但请注意,此名称包含两件事:多边形的扫描线填充(称为顶点序列)和扫描线种子填充(区域内)。
标签: java algorithm flood-fill