質問の意味:
与えられた2つの長方形は、二つの長方形平面の出力は、多くの部分に分割されています。
ソリューション:
道路は偉大な議論幾何コンピューティングされて、そして私の人生と書かれたBFSによるかもしれません。
離散エッジエッジは、次に、暴力BFSは数缶の合計を計算し、空いているにも丸で囲まれた、グリッドを空にするミドルノートと一致しません。
それは2つの点は、625種類の合計との間の長方形の、二つの長方形の関係を定義し、関係の25種類があるいかなる暴力、観察チャートの下で、点と矩形ならないないように方法がありません
それはBFSを助けるために持っていたかのように、テーブルについては、どのように再生します。
書式#include <iostreamの> の#include <キュー> の#include <アルゴリズム> 書式#include <CStringの> 使用して 名前空間はstd; INT MAPP [ 11 ] [ 11 ]。 INT X [ 5 ]、Y [ 5 ]。 const int型 changex [ 4 ] = { 0、0、1、 - 1 }。 const int型 changey [ 4 ] = { 1、 - 1、0、0 }。 無効 LSH(INT * A){ int型 B [ 5 ]。 ブールフラグ[ 5 ] = {}; B [ 1 ] = [ 1 ]、[B 2 ] [= 2 B [;] 3 ] [= 3 ]; B [ 4 ] = [ 4 ]。 ソート(B + 1、B + 5 )。 int型 L =一意(B + 1、B + 5)-B- 1 。 以下のために(int型 i = 1 ; iは= Lを<; iは++ ){ 用(INTの J = 1 ; J <= 4 ; J ++ ){ 場合([J] == B [i]は&&フラグ[J] == 0 ){ [J] = 2 * I。 フラグ[J] = 1 。 } } } を返します。 } INT ()を解決{ INT ANS = 0 。 memset(MAPP、0、はsizeof MAPP)。 // のprintf( "%D%D%D%D \ n"は、X [1]、Y [1]、X [2]、Y [2])。 // のprintf( "B:%D%D%D%D \ n"は、X [3]、Y [3]、X [4]、Y [4])。 以下のために(int型 i = 1 ; iは<= 10 ; I ++ ){ ための(int型 J = 1 ; J <= 10 ; J ++ ){ もし、((I == X [ 1 ] || I == X [ 2 ]) && J> = Y [ 1 ] && J <= Y [ 2 ]){ MAPP [I] [J] = - 1 。 } もし、((jは== yを[ 1 ] || jは==をY [ 2 ])&& I> = X [ 1 ] && iが<= xの[ 2 ]){ MAPP [I] [J] = - 1。 } もし、((I == X [ 3 ] || I == X [ 4 ])&& J> = Y [ 3 ] && J <= Y [ 4 ]){ MAPP [I] [J] = - 1 。 } 場合((J == Y [ 3 ] || J == Y [ 4 ])&& iが> = X [ 3 ] && iが[= xを< 4 {]) MAPP [I] [J] = - 1 。 } } } // ため(; iは= 10 <; I = 1 int型私は++){ // ため(INT J = 1; jは<= 10; J ++){ // のprintf( "%のC"、MAPP [I] [J] == - 1 '*':? // } // のprintf( "の\ n"); // } // キュー< 整数 > QX、QY。 以下のために(int型 i = 1 ; iは<= 10 ; I ++ ){ ための(int型 J = 1 ; J <= 10 ; J ++ ){ 場合(MAPP [I] [J] == 0 ){ ANS ++ 。 MAPP [I] [J] = ANS。 qx.push(I); qy.push(J)。 } しばらく(!qx.empty()){ int型 XX = qx.front(); INT YY = qy.front()。 qx.pop();()をqy.pop。 // printfの( "%D%D:"、XX、YY)。 用(int型のk = 0 ; K < 4 ; kは++ ){ int型 XXX = XX + changex [K]。 INT YYY = YY + changey [K]。 // のprintf( "%d個の%のD"、XXX、YYY)。 もし(XXX> = 1つの && XXX <= 10 && YYY> = 1 && YYY <&& MAPP [XXX] [YYY] == 0 ){ qx.push(XXX)。 qy.push(YYY)。 MAPP [XXX] [YYY] = ANS。 } } // のprintf( "の\ n"); } // {ための式(I ++; iは= 10 <I = 1 INT) // のための(INT J = 1; J <= 10; J ++){ // のprintf( "%のC"、MAPPを[I] [Jを] == - 1 '*':?MAPP [I] [J] '0' +); // } // のprintf( "の\ n"); // } } } 戻りANS; INT のmain(){ int型のT。 scanf関数(" %のD "、&T)。 一方、(t-- ){ scanf関数(" %D%D%D%D "、およびX [ 1 ]、&Y [ 1 ]、・X [ 2 ]、&Y [ 2 ])。 scanf関数(" %D%D%D%D "、およびX [ 3 ]、&Y [ 3 ]、・X [ 4 ]、&Y [ 4 ])。 LSH(x)は、LSH(Y)。 printf(" %d個の\ n " 、解決())。 // 以下のために(INT I = 1; I ++; iは= 10 <){ // ため(INT J = 1; J <= 10; J ++){ // のprintf( "%のC"、MAPP [I] [J] ==を?-1 '*':MAPP [I] [J] +) '0'; // } // のprintf( "の\ n"); // } } }