2011-10-22 11 views
4

2次元配列を持ち、1D配列に変換したい。1D配列要素の最近傍操作

2D配列がある:1次元配列に

1 2 3 4 
5 6 7 8 
9 10 11 12 
13 14 15 16 

:私は得ることができるように私は、1次元配列の要素数の最近傍にアクセスするにはどうすればよい

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 

1 2 3 
5 6 7 
9 10 11 

in C++で2D配列でアクセスしたときと同じ結果です?

+1

算術演算付き。古いインデックス付け 'm [1] [2]'新しいインデックス付け 'm [1 * 4 + 2]'。 x [y-1]、x [x + 1] [y]など、新しい:[((x-1)+ 4 *(x-1) 1)、[x + 4 *(y-1)]、[x + 1 + 4 *(y-1)]である。配列の幅を '4'に置き換えます。 – user786653

+0

ありがとうございます。 – taker

+0

ロジックは、あなたはPythonコードを読んで気にしない場合、見つけることができます[ここ](http://stackoverflow.com/a/41880018/5496529) –

答えて

3

Mのアイテムが長さがN個長い場合は、M*Nの要素を持つ1Dアレイが必要です。

要素 xの隣人を見つけよう:上記溶液を底面としているアレイの最上部に隣接し、だけでなく、右端と左端を作ること

left(x) = (x - 1) % M 
right(x) = (x + 1) % M 
above(x) = (x - M) % (M * N) 
below(x) = (x + M) % (M * N) 

注意を。これを取り除くには、モジュラ演算を省略し、インデックスが右/左/上/下の端を通過したときを検出するだけです。

+0

申し訳ありませんが、あなたの解決策を理解できません。私を啓発しますか? – taker

+0

配列位置 'x'を見ると、左側の隣は' x-1'になります。右側の隣は 'x + 1'にあります。あなたの上の隣人は 'x-M'です。あなたの下の隣人は 'x + M'です。これは、あなたが下がるにつれて縦軸が増加することを前提としています。それを減らしたい場合は、上記の数学と数学を入れ替えてください。リテラルエッジケースです。上端、下端、左端、または右端に到達したときに、どのようにネイバーを処理したいですか? – ObscureRobot

関連する問題