UVA1595(对称轴)。

本文介绍了一种使用C++实现的判断点集是否关于某条直线对称的算法。通过对点集按横坐标排序,找到潜在的对称轴,并检查每一点是否能与另一点形成对称对。若所有点都能找到对称点,则点集关于该直线对称。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在上别的课,没时间深入学c++和数据结构,所以专门挑了一些简单题练练手。

按照横坐标排序,找出对称轴,然后枚举每个点是否关于这条直线对称;

如果不对称把横坐标存入数组,如果这个店不在对称轴上面的话就输出NO。

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstdlib>
 5 #include <cmath>
 6 #include <cstring>
 7 
 8 using namespace std;
 9 
10 typedef struct point
11 {
12     int x,y;
13 };
14 int cmpa(const void *a,const void *b)
15 {
16     struct point* pa = (struct point*)a;
17     struct point* pb = (struct point*)b;
18     return pa->x-pb->x;
19 }
20 int cmpa2(const void *a,const void *b)
21 {
22     struct point* pa = (struct point*)a;
23     struct point* pb = (struct point*)b;
24     return pa->y-pb->y;
25 }
26 int main()
27 {
28     int m,n,i,j,k,t;
29     point a[1010];
30     int book[20020];
31     scanf("%d",&t);
32     while(t--)
33     {
34         scanf("%d",&n);
35         memset(book,0,sizeof(book));
36         for(i=0; i<n; i++)
37         {
38             scanf("%d%d",&a[i].x,&a[i].y);
39         }
40         qsort(a,n,sizeof(a[0]),cmpa);
41         int mid = a[0].x+a[n-1].x;
42         int flag1 = 1;
43         k=0;
44         for(i=0; i<n; i++)
45         {
46             int flag = 1;
47             for(j=0; j<n; j++)
48             {
49                 if(a[i].x+a[j].x==mid&&a[i].y==a[j].y&&i!=j)
50                 {
51                     flag=0;
52                     break;
53                 }
54             }
55             if(flag==1)
56             {
57                 book[k++]=a[i].x;
58             }
59         }
60         for(i=0; i<k; i++)
61         {
62             if(book[i]*2!=mid)
63             {
64                 flag1=0;
65                 break;
66             }
67         }
68         if(flag1)
69             printf("YES\n");
70         else
71             printf("NO\n")
72     }
73     return 0;
74 }

 

转载于:https://www.cnblogs.com/HsiaoYeekwan/p/6277534.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值