2016-11-10 10 views
-1

私は長方形のパッキングアルゴリズムを実装しようとしています。Javaの長方形のパック

は、私はそれぞれの矩形がheigthと幅持って私の入力にいくつかのrectangesを持っている(とインデックス番号を、ので、私はそれらをログインしたとき、私はそれらを識別することができるようになります)私が行列を持って

(整数[ ] [])、私はこの行列に私の四角形を保存したい。初期化後、マトリックスは変更できないので、固定サイズになります。

我々は2つの長方形持っている場合は、のを見てと例みましょう:

new Rectangle(2,3,1) //height=2, width=3, index=1 
new Rectangle(1,2,2) //height=1, width=1, index=2 

をそして3×3行列持ってみましょう:私はアルゴリズムを実行して終わりだ後

Integer[][] matrix = new Integer[4][3]; //height=4, width=3 

を、私はしたいと思います次のようなものを参照してください(マトリックスをsystem.outに印刷する場合):

1 1 1 
1 1 1 
2 2 0 
0 0 0 

最初の2行は、 ctangle(高さは2、幅は3)、3行目に2番目の矩形があります。 0は空白が残っていることを意味します(他にもいくつかの長方形を格納することができます)

欲張りな(または任意の)アルゴリズムのために良い方法を見つけるのは難しいです。

長方形を最大から最小まで並べ替えます。 次に、私は矩形を保存する必要があります:マトリックスに十分なスペースがあれば、それをそこに置きます。そうでなければ、別のセルを試します。私たちは場所を見つけるまで、すべての行とすべてのセルで続けます。

誰でも正しい方向に向けることができますか?良いアルゴリズム、擬似コード、または私の方法を理解するために使用できるものについての説明。

おかげで、 マーク

+0

これは2dナップザックの問題です。 https://www.coursera.org/learn/discrete-optimizationそのコースは参考になるかもしれません。この本のように:http://www.algorist。com/ – TurnipEntropy

+0

もし私たちが "持っていて"、 "もしあなたが私"であれば、どのようにしてもそれをどのようにも得られないでしょう。そして、3x3の行列int [4] [3]を持たせましょう。アップ!! – gpasch

答えて

0

あなたは行列で長方形を「描く」にしたい、とあなたはすでにサイズによってソートされた長方形を持っています。あなたが/サイクルにする必要がありますすることができ

  • が矩形サイズを取得します。長方形のための行列に十分なスペースがあるかどう
  • かをチェックし(それはコンストラクタで提供されます場合は、依存します)。
  • 描画(ループを描くために、またはwhileループを使用)。

行列のサイズを取得し、四角形と比較するmatrix[0].lengthmatrix.lengthを使用してください。

私は最大の課題は、それらの変数で迷子にならないことだと思います。描画を開始する必要がある行の数とその変数を停止して更新する時期を数え続ける必要があります。