私は、12個の特定のテトリスのようなピースを6×10グリッドに塗りつぶす方法がいくつあるかを決定するアルゴリズムを構築したいと考えています。不規則な形状の格子を塗りつぶす
すべてのピースはそれぞれ5つのブロックで構成されており、自由にミラーリングおよび回転できます。それらはすべてグリッドに(重なりなく)フィットしなければならず、余白を残してはいけません。
さらに、アレンジメントは、既存のアレンジメントのミラーリングまたは回転イメージでない場合にのみ、別個のものと見なされます。
私はそれが自分の行列だ各回転ステップを与えるために選択した、とT-ブロックの表現は次のようになります。
私の最初のアプローチは強引だった[
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 1, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 0, 0
],
[
0, 0, 1, 0, 0,
0, 0, 1, 1, 1,
0, 0, 1, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0
],
[
0, 0, 1, 0, 0,
0, 0, 1, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0
],
[
0, 0, 0, 1, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0
]
。 1つの図形で開始点を1つずつ試してから、左上隅から順に1つずつ他のすべての図形に合わせようとします。
しかし、誰かがこの問題に対してより良いアプローチをしているのか不思議です。
あなたはペントミノの研究をしましたか? これは私がどこから始めるのか - その単語を検索エンジンに入力して起動するためです。 あなたの図形は不規則ではありません。 小さな紙Donald E. Knuthを見つけた場合。 "ダンスリンク"(ポストスクリプト、1.6メガバイト) ScottとFletcherの記事の要約が含まれています。 (https://en.wikipedia.org/wiki/Pentomino) 彼は彼がいくつかのプログラムを開発していると言います。多分それらをjavaに変換することができます。それから、ここにそれを提示することができます。これは主にプログラミングフォーラムなので、話を始めることができます。 – gpasch