有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在2D数组中查找最近的非零单元格

我有一个二维布尔数组。我试图找到一种算法来遍历这个数组,并创建一个新的int数组,它将从每个单元格中打印出最接近的true。 所以如果我们有一个布尔值,比如

0 1 0
0 0 0
0 0 1

那么我的int数组就是

1 0 1
1 1 1
2 1 0

我试着遍历数组并使用这个函数

private static int checkClosest(boolean[][] check, int row, int col){
    int dist =0;
    int rowDist = 0;
    int colDist = 0;
    int diagDist = 0;
    for(int i=row; i< check.length;i++){
        if(check[i][col]){
           rowDist = (i-row);
            break;
        } 

    }
    for(int i= col; i<check[row].length; i++){
        if(check[row][i]){
           colDist = (i - col);
            break;
        } 

    }
    int count=0;
    for(int i= row, j= col; i < check[i].length; i++){
        if(check[i][j]){
           diagDist = count;
            break;
        }
        count++;
        j++;

    }
    dist = Math.max(rowDist, colDist);
    return Math.max(dist, diagDist);


}

但这不管用。有人能帮我找到一个最佳的方法吗


共 (1) 个答案

  1. # 1 楼答案

    我认为你的方法是完全错误的

    这个函数找到了一个给定gell的最小曼哈顿距离,这个gell由row,col指定。你需要做的就是遍历整个2D数组,找到最近的一个

    private static int checkClosest(boolean[][] check, int row, int col){
    
        int minDist = 1000;    //Some really high value
    
        for(int i=0; i < check.length; i++){
            for(int j=0; i < check[i].length; j++){
                if(check[i][j]){
                    minDist = Math.min(minDist , Math.abs(row-i)+Math.abs(col-j));
                }
            }
        }
    
        return minDist;
    }
    

    肯定有更有效的方法来做到这一点,但我不想让你不知所措