2016-05-31 4 views
0

私は自分のツリーデータクラスをJavaで構築しました。これはミニマックスアルゴリズムで使用されます。ツリー内の各ノードは、ユニークなゲーム状態を表すBoardオブジェクト(私が作成したもの)を保持し、ツリー内のエッジ(Integerは移動方向を表す - ゲームはTron)を保持します。エッジがつながっている状態。私はTreeを取り込んで再帰的にそれを各プレイヤーが行う4つの整数の動きのそれぞれに与えられた修正されたゲーム状態を持つ深度 'DEPTH'(パラメータではなく他の場所で定数として保持される)各レベル。私はそれがミニマックスのために使われていることから、ツリー構造は、次のようにする必要があり、また...ちょうどJavaの各ノードの下に4つの子を持つツリーを再帰的に埋め込む方法

それを行うことが最善の方法はかなりよく分からない:

  • 電流を表すルート、変わらず変更されたゲーム状態を表す
  • 第二レベルの子のユーザーの4つの可能な動き与えられたゲームの状態変更されたゲーム状態を表す
  • 第一レベルの子供たちは、与えられたユーザーの4つの移動のために、相手の4つの可能な動き
  • 第三レベルのゲームの状態を与えられました相手の動き、 NDように...レベルのDEPTH番号に上の拡張ここで

は私が仕事をしなければならない基本的な方法は以下のとおりです。

  • ツリーは取締役会とにつながる整数方向を取るためのコンストラクタボード
  • ツリーとブール値「userMove」を取り、ツリーの内部の子リストに4つの新しいボードを追加して、ユーザまたは相手の4つの可能な移動のそれぞれについて、変更されたゲーム状態を表すメソッドを生成します。 'userMove'パラメータは、Boardの子として生成されたものが、ユーザの4つの移動の結果であるべきか、または相手の4つの移動の結果であるべきかを指定する。
  • ツリーの方法は、(getDepthと呼ばれる)(それがいずれかを持っている場合)、その親と子供からなる大きなツリー内のノードの深さを返すこと - > 0を返し、それがルートの場合

でした誰もおそらく私は、この交互のミニマム・ケータリングの方法で私がツリーをどのように埋めるのかについて、他の方法が必要な場合を除いて、擬似コードのビットを私に提供しています(私が提供した方法を使用します)。

答えて

1

ロジックの実装に移る前に、データ構造についていくつかのコメントがあります。

ツリーの各ノードにボードの完全なコピーを保存する必要はありません。あなたが各点で知る必要がある唯一のことは、そこに到達する動きとその位置の価値です。値を計算するには、葉の中のボードの状態を知る必要がありますが、計算が完了したらそのコピーを保持する必要はありません。

さらに進んで、minimaxはツリーの永久的なコピーを保持する必要はありません。再帰を使用すると、各ノードの最大値または最小値をローカル変数に保存して返すことができます。ツリーに永続的なコピーを保持する必要はありません。

minimaxにウィキペディアの記事があります。

関連する問題