-6

こんにちは、このパズル ソルバーで動作するコードを開発しようとして問題が発生しています。それぞれ 5 要素の 2 つの整数配列があります。

a[] = {1,1,0,2,2};
b[] = {2,2,0,1,1};

私のプログラムは、配列 a を配列 b に段階的に再配置し、それらが一致するかどうかを比較することを想定しています。

解決のルールは次のとおりです。整数 1 は右にのみ移動でき、整数 2 は左にのみ移動できます。

基本的に、紙の上でこのパズルを解く方法は次のとおりです。

a b c d e
1 1 0 2 2 - >starting positiong
1 0 1 2 2 - >b moves to c therfore b is now vacated 0
1 2 1 0 2 - >d can jump over c because they are opposites so b = d
1 2 1 2 0 - > e moves over to the vacated d
1 2 0 2 1 - > c can jump over d to e because e is vacated
0 2 1 2 1
2 0 1 2 1
2 2 1 0 1
2 2 0 1 1 = b[]

配列を宣言するためだけにコードを書きましたが、ヘルプを解決する方法がわかりません。

4

1 に答える 1

2

ここには 2 つの可能性があります。パズルが例のように単純な場合は、最初に深さから再帰的に解くことができます。すべてのステータスについて、ステップを作成するために使用できるルールを評価します。次のレベルを試すために、ソルブ関数を再帰的に呼び出して、それらをすべて試します。評価するには、最短ルートを見つけるための手順を覚えておく必要があります。

より複雑になる場合は、Minimax アルゴリズムを調べることができます。記憶がよければ、さまざまな状態を評価する何らかの方法が必要です。たとえば、適切な場所にある項目の数によって評価する必要があります。また、失敗する運命にある可能性を切り捨てるヒューリスティックを設計することもできます。

幸運を!

于 2013-10-02T20:08:16.493 に答える