-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 获得 4 的值,因此我可以使用 k 在每个索引中进行比较。

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 回答