欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

最小包围矩形

程序员文章站 2022-08-19 13:03:15
题目内容: 给定一组二维坐标,表示直角坐标系内的一个多边形的连续的顶点的坐标序列。计算能包围这个多边形的平行于坐标轴的最小矩形,输出它的左下角和右上角的坐标。 输入格式: 第一行是一个正整数n表示顶点的数量,第二行是n组整数,依次表示每个顶点坐标的x和y值。 输出格式: 四个整数,依次表示所计算的矩 ......

题目内容:

给定一组二维坐标,表示直角坐标系内的一个多边形的连续的顶点的坐标序列。计算能包围这个多边形的平行于坐标轴的最小矩形,输出它的左下角和右上角的坐标。

 

输入格式:

第一行是一个正整数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 }