私は任意のサイズの2Dバイナリ行列を持っています。私は最大の面積を示す、この行列の矩形のセットを見つけたいと思います。制約は次のとおりです。領域を最大化する長方形を選択してください
- 長方形は、マトリックスの "0" - フィールドと "1" - フィールドのみをカバーできます。
- 各矩形は、次の矩形から所定の距離を持たなければなりません。
ので、私はこの行列によってビットさらにこれを説明しましょう:
1 0 0 1
0 0 0 0
0 0 1 0
0 0 0 0
0 1 0 0
は、(2つの長方形の間の最小距離は1その結果、最適解がコーナーで矩形を選択することであろうとする1 、0) - (3,1)および(1,3) - (4,3)を含む。これらの長方形は最小です。 1フィールド離れており、 "1"フィールドには存在しない。さらに、この解決法は最大面積(6 + 4 = 10)を得た。
最小距離が2の場合、エリア4 + 4 = 8の場合、最適値は(1,0) - (4,0)と(1,3) - (4,3)になります。今まで
list<rectangle> rectangles;
struct rectangle {
int i,j; // bottom left corner of rectangle
int width,length; // width=size in neg. i direction, length=size in pos. j direction
};
と:私は、リスト内のすべてのこれらの矩形を保存 Find largest rectangle containing only zeros in an N×N binary matrix
:
は今まで、私はこの記事に類似した長方形を見つけるために達成しました私はブルートフォース方式についてしか考えていませんでしたが、もちろん私はこれに満足していません。
list
で対応する四角形を見つける方法のヒントとヒントを教えていただきたいと思いますが、私の問題がはっきりしていることを願っています。上記の例で
110
000
110
、2最大の領域が存在する:
制限されています四角形ではない長方形の場合は?面積= 1ですか? – Rama
これは正方形である必要はありませんが、私のコードでは長方形の長さと幅に関して制限があります。私の目的のために、行列は少なくとも50x50であり、長方形は3x3の最小サイズを持っています。 – Kapa11
整数プログラミングはオプションですか? –