1. 程式人生 > >最小包圍矩形

最小包圍矩形

給定 style 小包 can std ron argv 坐標軸 內容

題目內容:

給定一組二維坐標,表示直角坐標系內的一個多邊形的連續的頂點的坐標序列。計算能包圍這個多邊形的平行於坐標軸的最小矩形,輸出它的左下角和右上角的坐標。

輸入格式:

第一行是一個正整數n表示頂點的數量,第二行是n組整數,依次表示每個頂點坐標的x和y值。

輸出格式:

四個整數,依次表示所計算的矩形的左下角的坐標的x、y值和右上角坐標的x、y值。輸出最後帶有回車換行。

輸入樣例:

5

1 1 1 4 3 7 4 4 4 1

輸出樣例:

1 1 4 7

 1 #include <stdio.h>
 2 
 3 typedef struct _dot {
 4     int
x; 5 int y; 6 } Dot; 7 8 int main(int argc, char const *argv[]) 9 { 10 Dot left_down, right_up; 11 left_down = right_up = (Dot){0,0}; 12 13 Dot p; 14 int n; 15 scanf("%d", &n); 16 17 for ( int i = 0; i < n; i++ ) { 18 scanf("%d %d", &p.x, &p.y);
19 if ( left_down.x || left_down.y || right_up.x || right_up.y ) { 20 if ( p.x < left_down.x ) { 21 left_down.x = p.x; 22 } else if ( p.x > right_up.x ) { 23 right_up.x = p.x; 24 } 25 if ( p.y < left_down.y ) {
26 left_down.y = p.y; 27 } else if ( p.y > right_up.y ) { 28 right_up.y = p.y; 29 } 30 } else { 31 left_down = p; 32 right_up = p; 33 } 34 } 35 printf("%d %d %d %d\n", left_down.x, left_down.y, right_up.x, right_up.y); 36 return 0; 37 }

最小包圍矩形