0
做作业,执行洪泛填充算法。我正在编写一份本指南的程序:http://en.wikipedia.org/wiki/Flood_fill。我有一些问题:关于Java中洪泛填充算法的问题
- 是正常的功能,以指定的参数替换任何字符
bucketFill.fill (0, 0, '*', 'O');
的颜色,我不知道会是什么样的颜色最初这些坐标? - 算法是否正确?我写的,例如维基百科,但我的程序的结果如下:
@@@@@ @@@@@ @@@@@ @@@@@ @@@@@ @@@@@ @@@@@
我想,一定是这样的:
*@@@@
@@@@@
@@#@@
@@@@@
@@@@@
@@@##
@@@@@
我的代码:
class BucketFill {
private char[][] pixels;
public BucketFill(char[][] pixels) {
this.pixels = pixels;
}
public void fill(int x, int y, char newColor, char oldColor) {
if (x < 0) return;
if (y < 0) return;
if (x >= pixels.length) return;
if (y >= pixels[x].length) return;
oldColor = pixels[x][y];
if (newColor == pixels[x][y]) return;
if (oldColor != pixels[x][y]) return;
pixels[x][y] = newColor;
fill(x - 1, y, newColor, oldColor);
fill(x + 1, y, newColor, oldColor);
fill(x, y - 1, newColor, oldColor);
fill(x, y + 1, newColor, oldColor);
}
public void inspect() {
for (int y = 0; y < pixels.length; y++) {
for (int x = 0; x < pixels[y].length; x++) {
System.out.print(pixels[y][x]);
}
System.out.print("\n");
}
}
public static void main(String argv[]) {
char pixels[][] =
{
{ 'O', 'X', 'X', 'X', 'X' },
{ 'X', 'O', 'O', 'O', 'X' },
{ 'X', 'O', '#', 'O', 'X' },
{ 'X', 'O', 'O', 'O', 'X' },
{ 'X', 'X', 'X', 'X', 'X' },
{ 'X', 'X', 'X', '#', '#' },
{ 'X', 'X', 'X', 'X', 'X' }
};
BucketFill bucketFill = new BucketFill(pixels);
bucketFill.fill(0, 0, '*', 'O');
bucketFill.fill(3, 0, 'O', 'O');
bucketFill.fill(2, 1, '@', 'O');
bucketFill.inspect();
}
}
感谢您的回答!我还有一个问题:但是如果我在这里看不到当前颜色:'fill(0,0,'*','O')'?在我的例子中,我使用的不是当前的颜色。 – rel1x 2014-12-07 14:55:49
@pertpoert当您传递与当前颜色不同的颜色时,结果不得更改。 – dasblinkenlight 2014-12-07 15:48:47
要添加到此答案,请查看Boundary Fill算法。它们都是相似的算法,但另一个可能解决“不知道的旧颜色”问题。 – shebang 2014-12-07 16:18:47