あらかじめ決められたサイズの 2D 配列と、そのスペースに収まる番号付きの四角形のリストがあります。これらの各長方形には、既知の固定の高さと幅があります。2D 配列は、すべての四角形を快適に収めるのに十分な大きさであることが保証されています。
これらの各長方形を配列にランダムに配置して、重ならないようにし、すべてが配置されるようにする必要があります。それらは任意の方向に配置できます。戦艦のゲームに自分の船を配置することを想像してみてください。船のサイズがより多様で、グリッドがはるかに大きくなっています。
完成した配列は次のようになります: (0 は空のスペースを表し、ゼロ以外の数値は四角形の数値を表します)
0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 4 4 4 0
0 1 1 0 2 2 2 2 2 0 0 0 4 4 4 0
0 1 1 0 2 2 2 2 2 0 0 0 0 0 0 0
0 2 2 2 2 0 0 0 0 0 0 0 0
0 2 2 2 2 0 5 5 0 0 0 0
0 3 3 3 3 3 0 0 0 0 5 5 0 0 0
0 3 3 3 3 0 7 7 7 5 5 6 6 0 0
0 0 0 0 0 7 7 5 5 6 6 0 0
私が検討した 1 つのアプローチは、四角形ごとに、ランダムな配置と方向を選択し、それをマトリックスに配置しようとすることです。以前に配置されたブロックとの衝突が検出された場合は、再試行してください。これはおそらく最も簡単に実装できますが、あまり効率的ではないようで、明確に決定論的な方法で終了しません (リストの末尾近くの長方形は、以前に生成されたブロックとかなりの時間衝突し続ける可能性があります)。
後の長方形を配置するのにそれほど問題にならない、これを行うためのより良い方法はありますか?