問題を解決するために選択した言語について言及していない限り、何らかの疑似コードを使用します
すべてが問題なければ、1 つの軸に沿った四角形のエッジの並べ替えられたコレクションは、重複しない間隔のシーケンスになるはずです。
- すべての長方形に番号を付け、個々の ID を割り当てます
- 空のバイナリ ツリー コレクション (btc) を作成します。このコレクションには、情報 btc::insert(key, value) を持つ整数ノードを挿入するメソッドが必要です
- すべての長方形に対して、次のようにします。
foreach rect in rects do
btc.insert(rect.top, rect.id)
btc.insert(rect.bottom, rect.id)
- 今、btc を反復します (これにより、並べ替えられた順序が得られます)
btc_item = btc.first()
do
id = btc_item.id
btc_item = btc.next()
if(id != btc_item.id)
then report_invalid_placement(id, btc_item.id)
btc_item = btc.next()
while btc_item is valid
5,7,8 - rect.left および rect.right の座標について、手順 2、3、4 を繰り返します。