我有一组二维布尔值。我试图找到一个算法来遍历这个数组并创建一个新的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);
}
但这不起作用。有人可以用最佳方式帮助我。
答案 0 :(得分:0)
我认为你的方法是完全错误的。
这个函数找到了由row,col指定的给定gell到close true单元格的最小曼哈顿距离。您所要做的就是遍历整个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;
}
肯定有更有效的方法可以做到这一点,但我不想用这种方式压倒你。