-1

特定の質問に塗りつぶしを適用しようとしています。ヘルプ関数を使用して変数を作成する方法を理解するのに苦労しているので、すべての再帰を通してそれを保持します。
それについてのスレッドがあるのを見たことがありますが、自分で使用する方法がわかりません。

これは私がこれまでに書いたコードです:

k変数を作成して同じままにするにはどうすればよいですか?

public static int[][] fill(int[][] map, int i, int j, int color) {
    int[][] ans = null;

    if ((i<map.length)&&(i>0)&&(j<map.length)&&(j>0))
    {
        if ((k!=map[i][j]))
        {
            map[i][j]=color;    
        }
    }
    fill(map,i-1,j,color);
    fill(map,i+1,j,color);
    fill(map,i,j-1,color);
    fill(map,i,j+1,color);
    return ans;
}

public static void fill(int[][] map, int i, int j, int color,int k)

k=map[i][j] 

これが私の配列だとしましょう:

4, 1, 2, 2
4, 4, 3, 1
1, 4, 4, 4

1、4、0、2

そして、4 の値を持つすべてのインデックスを塗りつぶしたいと思います。k を使用して各インデックスを比較できるように、k に 4 の値を取得させたいと考えています。

4

2 に答える 2

0

kの値を取得する新しい関数(この例ではorigColorと呼んでいます)を使用して、それを必要とする関数を渡します。kを使用する関数は、必要がない限り外部から見える必要はないので、以下で非公開にしました。

public static void fill(int[][] map, int i, int j, int color) {
  int origColor = map[i][j];
  fill(map, i, j, color, origColor);
}

private static void fill(int[][] map, int i, int j, int color, int origColor) {
  // actual fill method with recursive calls.
}
于 2012-12-20T14:36:45.633 に答える
0

私はあなたの質問に加えて、境界をチェックしているため、関数が機能しないことに気付きました。とにかく、そのようなコードを使用できます:

public static int[][] fill(int[][] map, int i, int j, int color) {

    int origColor = map[i][j];
    fill(map, i, j, color, origColor);


    return map;

    }

private static void fill(int[][] map, int i, int j,int color, int   origColor) {



    //checks if index is inside matrix and if the index is equal to original   number.

    if ((i<map.length)&&(i>=0)&&(j<map.length)&&(j>=0)&&(origColor==map[i][j]))

    {

    map[i][j]=color;



    //recursive call for north east west south.

    fill(map,i-1,j,color,origColor);

    fill(map,i+1,j,color,origColor);

    fill(map,i,j-1,color,origColor);

    fill(map,i,j+1,color,origColor);
    }


    }
 public static void printBoard(int[][] board) {
if (board == null)
    System.out.println("null");
else for (int i=0; i<board.length; i++) {
    if (board[i] == null)
        System.out.println("null");
    else
        for (int j=0; j<board[i].length; j++) 
            System.out.print(board[i][j]);
    System.out.println();
}
}

チェック用:

fill(map,1,1,9);
    printBoard(map);

幸運を!

于 2012-12-21T13:38:12.003 に答える