宿題 (C++) に問題があります。完全な解決策を求めているわけではありませんが、正しい方向に傾けることが役立つ場合があります。:)
NxN ボード (最大 N = 100) とそのボードに 1x2 の図形 (キューブ) があります。立方体は片側が赤く、反対側が青く塗られています。立方体のデフォルトの位置は、ボードの左上隅、青い面が上です。
B B . .
. . . .
. . . .
. . . .
(4x4 の例、B は青を表します)
黒板に石(障害物)がある可能性があります。 私のフィギュアでできる動き:
- 時計回りに 90/180/270 度回転させます。
- 立方体を右/左/上/下の端で反転させて、「上向きの色」を変更できます
たとえば、デフォルトの位置で右反転を使用すると、次のようになります。
. . R R
. . . .
. . . .
. . . .
次に、90度回転を使用します。
. . R .
. . R .
. . . .
. . . .
次に、左にフリップを使用します。
. B . .
. B . .
. . . .
. . . .
もちろん、回転時や反転時は石に着地できません。したがって、問題は - ボードの特定の構成 (フィギュアの位置と石の位置)に対して、最小数の移動と戻りを使用して、デフォルトの位置 (青い面が上向き!) で「立方体を家に持ち帰る」プログラムを作成することです。可能であれば 1、不可能であれば 0 を返します。
この問題は興味深いと思いますが、少し混乱していることを認めなければなりません。特にブルーサイド/レッドサイドの部分。通常の最短経路アルゴリズムの言語で使用できるこれらの動きを「翻訳」する方法が本当にわかりません (そして、これらのいずれも使用したことがありません)。だから、私はあなたが与えることができるすべてのアドバイスに感謝します!:)