【发布时间】:2015-05-03 17:21:35
【问题描述】:
我的目标是一个“绘画填充”功能,人们可能会在许多图像编辑程序中看到它。也就是说,给定一个屏幕(由一个二维颜色数组表示)、一个点和一种新颜色,填充周围区域,直到颜色从原始颜色发生变化。
我已经为二维数组实现了它,这里是代码:
public static void paint (int [][] screen,int OldColor,int NewColor,int y,int x)
{
if(y>screen.length-1||y<0||x>screen[0].length||x<0||screen[y][x]!=OldColor)
return;
screen[y][x]=NewColor;
paint(screen,OldColor,NewColor,y-1,x);
paint(screen, OldColor, NewColor, y+1, x);
paint(screen, OldColor, NewColor, y, x-1);
paint(screen, OldColor, NewColor, y, x+1);
}
但我想为像 3D 这样的多维数组实现它,可以通过添加来解决:
paint(screen, OldColor, NewColor, y, x,z-1);
paint(screen, OldColor, NewColor, y, x,z+1);
但是想象一下数组是 100 D...我该如何解决这个问题?
【问题讨论】:
-
您需要做的第一件事是避免递归函数!请改用队列。
标签: java arrays algorithm multidimensional-array