三维阵列上的三维洪水填充算法(Java)

时间:2013-04-29 07:03:27

标签: arrays 3d

我在论坛上进行了广泛的搜索,并没有完全覆盖这一点。我希望在枚举类型的数组上执行我称之为3D Flood Fill算法的操作。我想改变它中的枚举类型,而不是改变数组元素的“颜色”。这就是我到目前为止,如果您认为这样可行或者您有任何建议,请问我们。

 /*
  * CellType is my enum type. BOUNDRY_BOX enum type is type that I line the whole 3D array with. So the
  * whole inside surface of the 3D box is filled with CellType.BOUNDRY_BOX.
  **/
 public void fillAllVoidCells(CellType[][][] grid, CellType targetType, CellType replacementType, int x, int y, int z)
 {
    if ((grid[x][y][z] != targetType) && grid[x][y][z] != CellType.BOUNDRY_BOX)
    {
        break;
    }
    else
    {
        grid[x][y][z] = replacementType;

        fillAllVoidCells(grid, targetType, replacementType, x + 1, y, z);   // right
        fillAllVoidCells(grid, targetType, replacementType, x - 1, y, z);   // left
        fillAllVoidCells(grid, targetType, replacementType, x, y + 1, z);   // in front
        fillAllVoidCells(grid, targetType, replacementType, x, y - 1, z);   // behind
        fillAllVoidCells(grid, targetType, replacementType, x, y, z + 1);   // above
        fillAllVoidCells(grid, targetType, replacementType, x, y, z - 1);   // below
    }
 }

1 个答案:

答案 0 :(得分:0)

有几件事:

  • 休息不代表你的想法。你应该使用return来保留函数
  • 您可能需要在调用相邻单元格的函数之前检查您是否位于域的边界(否则会崩溃)
  • 使用递归进行洪水填充非常好......仅用于教育目的。使用队列效率更高
  • 一个简单的事情是尝试一下,看它是否有效!