0

私はフォーラムを広範囲に検索しましたが、これを完全にカバーするものはありません。私は本質的に、列挙型の配列に対する 3D フラッド フィル アルゴリズムと呼ぶものを実行しようとしています。配列要素の「色」を変更するのではなく、列挙型を変更したいと思います。これは私がこれまでに持っているものです。これがうまくいくと思うか、何か提案があれば教えていただけますか?

 /*
  * 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
    }
 }
4

1 に答える 1

0

いくつかのこと:

  • 休憩は、あなたが考えていることを意味するものではありません。関数を終了するには return を使用する必要があります
  • 隣接するセルの関数を呼び出す前に、ドメインの境界にいるかどうかを確認することをお勧めします (そうしないと、クラッシュします)。
  • フラッドフィルに再帰を使用するのは素晴らしいことです...教育目的のみです。キューを使用すると、はるかに効率的です
  • 簡単なことは、それを試してみて、それが機能するかどうかを確認することです!
于 2013-04-30T04:07:50.970 に答える