2012-05-01 52 views
4

我使用這兩個簡單的循環來從高處到底部,從右到左搜索網格。通過網格循環

for(int y=0; y<height; y++){ 
    for(int x=width; x>=0; x--){ 
    } 
} 

基本上,我想通過網格橫向搜索像下面的圖片中的數字,直到它覆蓋所有單元格。我的方法工作不好,所以我在這裏尋求幫助。

enter image description here

我怎樣才能做到這一點以最快的方式?我相信這應該可以做到只使用兩個循環,但我無法弄清楚。

+1

什麼沒有解決?電網如何建立?是否有空單元格?如果是這樣,你想只找到連接的細胞? – Thomas

+0

我只想從右上角到左下角循環網格。 –

回答

9

下面將做到這一點:

final int h = 4; 
final int w = 3; 
for (int d = 0; d < w + h; d++) { 
    for (int y = 0; y < h; y++) { 
     int x = w - d + y; 
     if (x < 0 || x >= w) continue; 
     System.out.printf("%d %d\n", x, y); 
    } 
} 

這裏,h是高度和w是網格的寬度。

該算法基於觀察結果,即對於每個對角線,到上邊緣和右邊緣的距離總和保持不變。

外層循環遍歷對角線;內部循環,覆蓋對角線上的所有單元格。

+0

輝煌!計算對角線的數量,並通過每個對角線循環。 +1 – ArjunShankar

+0

非常好的解決方案!謝謝! –