我有2D数组,例如:
1 1 1 0 0
0 0 1 1 1
1 0 1 0 1
0 0 0 1 1
0 0 0 0 1
现在如果我选择随机位置例如位置[4,2],我想得到这样的数组:
X X X X X
0 0 X X X
X 0 X 0 X
0 0 0 X X
0 0 0 0 X
这个算法的任何想法?无论用哪种语言。我只需要算法。
答案 0 :(得分:1)
我认为你在这里寻找洪水填充算法。因此,给定一点,您需要检查左侧,顶部,右侧和底部以及对角线,如果它们具有相同的值,则递归(或将其放入队列中)
public void fill(int i, int j, int value) {
if(checkSameValue(i, j, value) {
mark(i, j);
} else {
return;
}
if(insideBounds(i, j-1, value)) {
fill(i, j-1, value);
}
//Similarly for top, right and bottom and diagonals
}
使用队列实现以防止StackOverFlow错误。 BTW 这只是洪水填充算法的一个实现,你需要根据你的情况稍微修改一下。不要剥夺你所有的乐趣:)