java - 递归地改变矩阵中相同的数字

标签 java recursion matrix tail-recursion

给定一个由 int 数字、行和列索引(对于包含数字的随机单元格)和新数字组成的矩阵,我需要递归地返回该矩阵 - 但是现在所有周围的单元格都与随机数匹配手机号改为新手机号。例如: 对于以下矩阵-

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

由 fill(grid,1,1,0) 调用, 这个需要返回:

 * 0    1   2   2
   0    0   3   1
   1    0   0   0
   1    0   0   2

我尝试的是以下内容

public static int[][] fill(int[][] grid, int i, int j, int needed ) {

    if (i<= grid.length - 1 && j<=grid[0].length - 1 && i>0 && j>0) {
    grid[i][j] = needed ;

    if(legal_Neighbor(grid,i,j, i+1,j))
        grid= fill(grid, i+1,j,needed );
    if(legal_Neighbor(grid,i,j, i,j+1))
        grid= fill(grid, i,j+1,needed );
    if(legal_Neighbor(grid,i,j, i,j-1))
        grid= fill(grid, i,j-1,needed );
    if(legal_Neighbor(grid,i,j, i-1, j))
        grid= fill(grid, i-1,j,needed );

    }

其中 legal_Neighbor 是我调用的函数,它检查两个单元格是否具有相同的编号并且彼此相邻

我已经被这个问题困扰了好几天了。希望得到一些帮助

最佳答案

如果我正确理解你的问题,你想将所需的值传播到与原点具有相同值的邻居。

这里的要点是让网格中的每个节点都像一个自动机一样工作,如果自身发生变化,则将值传递给邻居。

以下是代码,但我将boundaryCheck留空:

static int[][] fill(int[][] grid, int i, int j, int needed) {
    if (!boundaryCheck()) throw new RuntimeException();
    int[][] clone = new int[grid.length][grid[0].length];
    //Clone matrix grid
    for (int k = 0; k < clone.length; k++) {
        clone[k] = grid[k].clone();
    }
    propagate(clone, i, j, needed, grid[i][j]);
    return clone;
}

static void propagate(int[][] grid, int i, int j, int needed, int target) {
    if (!boundaryCheck() || grid[i][j] != target || needed == target) return;
    grid[i][j] = needed;
    propagate(grid, i+1, j, needed, target);
    propagate(grid, i-1, j, needed, target);
    propagate(grid, i, j+1, needed, target);
    propagate(grid, i, j-1, needed, target);
}

关于java - 递归地改变矩阵中相同的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30247342/

相关文章:

python - Numpy 旋转矩阵乘法

java - 制作密码 validator 和规则之一是 : The Key Must Contain Either A '#' or A '_' , 但不是两者

java - JGit - 推送分支并添加上游(-u 选项)

JAVA使用Stream过滤器查询数据列表,空指针异常

recursion - polymer 递归模板绑定(bind)

java - 从 HashMap 的 HashMap 中检索对象的问题

algorithm - 为什么尾递归是对递归的错误使用?

r - 矩阵到具有行/列数的数据框

java - 使用 Jackson : Can we have optional variables in a POJO 解析 JSON

Python:根据目标矩阵的大小更改矩阵大小