2011-08-07 9 views
0

私はグリッドまたはサイズN * Nの2D配列を持っています。2次元配列を「ボックス」に分割し、ボックス内の要素をインデックスする

...... 
...... 
...... 
...... 
...... 
...... 

2つの整数、高さと幅が与えられています。

... ... 
... ... 
... ... 

... ... 
... ... 
... ... 

同じ6×6グリッドは、このような2×3のボックスに分けることができる:

... ... 
... ... 

... ... 
... ... 

... ... 
... ... 
グリッドは、このような3×3のボックスに、例えば、このサイズのボックスに分割されます

など。大文字であれば、与えられた2つの整数は常に、配列全体を上記のように均等かつきれいに分割すると仮定できます。問題は、配列に座標またはインデックスがある場合、この特定の座標の近傍をすばやくインデックスする必要があることです。隣人は同じ箱の中の点です。たとえば、ボックスのサイズが2 * 3の場合、(0,0)の近傍は{(0,1)、(0,2)、(1,0)、(1,1)、(1) 、2)}。これはあまりにも難しくはありませんが、私はリモートで簡単なものを思い付くことができません。私はC++を使用していますが、これは言語に依存しません。このアルゴリズムを実行しようとせずに

答えて

1

...擬似コードで

list_of_points find_neighbours_of(x, y, height_of_box, width_of_box) 
{ 
    corner_x, corner_y = find_top_left_corner_of_box_containing(x, y) 
    iterate over corner_x to corner_x + height_of_box 
     iterate over corner_y to corner_y + width_of_box 
      if current_x and current_y <> x, y add them to list 
} 
関連する問題