私は現在、15個のパズルプログラミング割り当てに取り組んでいます。ここで私の質問は、隣接するタイルと空のタイルを交換する方法についてです。2次元配列内の2つの値を交換する
たとえば、最初のセットアップボードを見てみましょう。 私が持っている:
int originalBoard[4][4] = {
{1 , 2, 3, 4},
{5 , 6, 7, 8},
{9 ,10,11,12},
{13,14,15, 0}};
をので、ここで、アレイ内の12、15、及び0(空のタイル)の位置である[3] [4]、[4] [3]、[4] [4]である。 12と15のどちらかで0を交換する方法は何でしょうか?
私が気にしていたのは、移動するたびに空のタイルを追跡するループを作成することでした。
私は、最適な方法は2つの機能を持つことだと思います。 1は空のタイルの位置を更新し、1は移動を行います。
だから、私が持っているだろう、右私の頭の上から:
void locateEmptyTile(int& blankRow, int& blankColumn, int originalBoard[4][4])
{
for (int row = 0; row < 4; row++)
{
for (int col = 0; col < 4; col++)
{
if (originalBoard[row][col] == 0)
{
blankRow = row;
blankColumn = col;
}
}
}
}
void move(int& blankRow, int& blankColumn, int originalBoard[4][4])
{
}
そして、私のmain
機能で、私は変数を持っています:int blankRow
と
int blankColumn
を今、どのように私はそのデータを取るだろうlocateEmptyTile
からmove
ファンクションに関連する実際の方法で適用しますか?このプロセスは現在、私の頭の中でつながっていません。
少し助けていただきありがとうございます。
#include <algorithm> // until c++11
#include <utility> // since c++11
...
int m[3][3];
...
//somewhere in the code
std::swap(m[i][j], m[j][i]); // this swaps contents of two matrix cells
...
それとも、(例えば、int型aとint型b)において、二つの変数の内容を交換する場所あなただけ書くことができます:
インデックスには注意してください。 C++配列はゼロベースなので、[3] [4]、[4] [3]はあなたが思っているものではなく、[4] [4]は範囲外です。 – acraig5075
'locateEmptyTileあなたは2、3、または4つの可能な隣接セルを交換することになります。スワッピングの可能なターゲットを計算する必要があります。次に、 'move'メソッドが2つのセルの位置を入れ替えてスワップさせるようにします。 – acraig5075