2016-05-14 107 views
1

我有一個布爾二維數組。我試圖找到一個算法來遍歷這個數組,並創建一個新的int數組,它打印出每個單元格中最接近的真值。 因此,如果我們有一個布爾值,像查找2D陣列中最接近的非零單元格

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

你能否詳細闡述一下你的問題@Zeus? –

+0

請參閱提供的示例。這應該清楚地解釋這個問題。 – Zeus

+0

抱歉,我知道了這個時間其實..但你的雙維數組應該是固定的或可能會發生變化? @Zeus –

回答

0

我認爲你的方法是完全錯誤的。

那麼此功能查找到由行指定一個給定的蓋爾,山坳的關閉真電池的最小曼哈頓距離。所有你需要做的就是通過整個二維數組迭代,並找到最近的一個

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; 
} 

肯定有更有效的方式來做到這一點,但我不想與壓倒你。