在2D数组中选择相同值的区域

时间:2015-03-27 19:56:52

标签: java arrays algorithm

我有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

这个算法的任何想法?无论用哪种语言。我只需要算法。

1 个答案:

答案 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 这只是洪水填充算法的一个实现,你需要根据你的情况稍微修改一下。不要剥夺你所有的乐趣:)