0

ノードの有効なネイバーを計算しようとしています

配列には次のような要素が含まれています[2,8,3,0,1,4,7,6,5]

マトリックス:

          2 8 3
          0 1 4
          7 6 5

8パズルロジックに似ています。上記の行列では、0 を 2 または 1 または 7 と交換できます。-1、+1、-3、+3 で試しました。ただし、0 は 3 と交換できないため、-1 や +1 は使用できません。また、配列内の位置を更新する必要があります。これを達成するためのロジックは何ですか。

4

2 に答える 2

0

3x3 しかないので、neighbour-list をハードコーディングできます (もっと複雑な場合は、それを計算するロジックを書くことをお勧めします):

neighbour-map := {0:[1,3], 1:[0,2,4], 2:[1,4,5],...}

0:[1,3]配列内の最初の項目 (値 = 2) が、インデックス 1,3 (値:8および0) に隣接することを意味します。等

より大きな「行列」を扱う必要がある場合は、隣人を計算する必要があります。入力を行列 (配列の配列) に移動し、ak0053792 が以下に書いた「ルール」のリストに従って計算する方が簡単ですが、すべての「コーナー」ケース (オンになっているアイテム) も処理します。たとえば、一番上の行には y-1 に隣接する行がありません)。

于 2014-06-29T04:30:43.380 に答える
0

単純なロジックは、選択した要素を交換している配列要素が隣接する要素であるかどうかをチェックします。これは、以下のアルゴリズムで実行できます

1) 現在の要素の位置を特定する

2) スワップ元の要素の位置を特定します。

3) スワップ要素の位置が現在の要素から下の範囲内にあるかどうかを確認します。したがって、現在の要素の位置が x,y の場合、スワップ要素は次の範囲内にある必要があります。

1) x-1, y-1
2) x-1, y
3) x-1, y+1
4) x, y-1
5) x, y+1
6) x+1, y+1
7) x+1, y
8) x+1, y-1
于 2014-06-29T04:33:02.177 に答える