4

次元の正方形nを使用して、次元のチェス盤でチェスをプレイできるアルゴリズムがあるとします。{1,...,8}^n n

次元配列またはチェス盤表現の ArrayList をn指定すると、アルゴリズム自体は次元で問題なく機能します。n問題はn、実行時に指定されることです。

nこのような次元のチェス盤を生成して使用するエレガントな方法はありますか?

私の頭に浮かんだのは、n次元の ArrayList を作成し、 の場合は Integers の ArrayList をn == 1返し、ArrayLists の 2 番目のセットの各 ArrayList が dimension を持つ ArrayLists の ArrayList を返す再帰関数でしたn-1

しかし、これはまったくエレガントではないようです...

[編集]

コメントする前に削除されたように見える回答は、サイズ8の他のリストを含む1つのリストの生成を示唆してい8 ^ numberOfDimensionsました.最初のリスト内で多くのリストを使用すると、おそらくうまくいくでしょうが、手動で追跡する必要があります.次元の。

4

2 に答える 2

2

チェス盤の優れたデータ構造はMap. Listこれにより、n整数インデックスに基づいて位置を検索できます。

Map<List<Integer>, BoardCell> chessboard;

BoardCellどのピースが他のピースを脅かすかなどを確認できるように、クラスはおそらくそのインデックスへの参照も必要とするでしょう。

class BoardCell {
   private final List<Integer> index;
   private final Figure figure;
}

もちろん、チェス盤の生成は遅く (漸近的に指数関数的)、再帰的に行うことができるすべての可能な盤の位置を列挙することによって行われます。

Listこちらはシュトレンなどよりも上品な感じListですList


Viliam Búr がコメント セクションで提案したように、Mapデータ構造を使用すると、関連するボード セルのみを追跡できます。このタイプのデータ構造は、スパース表現と呼ばれます。

于 2013-10-23T09:31:24.887 に答える