其他分享
首页 > 其他分享> > 区间不相交问题

区间不相交问题

作者:互联网

区间不相交问题:给出N个开区间(x, y),从中选择尽可能多的开区间,使得这些开区间两两没有交集。例如对于开区间(1, 3),(2, 4),(3, 5),(6, 7)来说,可以选出最多三个区间(1, 3),(3, 5),(6, 7),它们互相没有交集。

贪心策略:总是先选择左端点最大的区间(或者是右端点最小的区间)

选择左端点最大的区间的代码如下:

 1 #include<stdio.h>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn = 110;
 5 struct Inteval
 6 {
 7     int x, y;
 8 }I[maxn];
 9 bool cmp(Inteval a, Inteval b)
10 {
11     if(a.x != b.x)
12     {
13         return a.x>b.x;
14     }
15     else
16     {
17         return a.y<b.y;
18     }
19 }
20 int main()
21 {
22     int n;
23     while(scanf("%d", &n), n!=0)//死循环
24     {
25         for(int i = 0; i < n; i++)
26         {
27             scanf("%d %d", &I[i].x, &I[i].y);
28         }
29         sort(I, I+n, cmp);
30         int ans = 1, lastX = I[0].x;
31         printf("(%d,%d)\n", I[0].x, I[0].y);
32         for(int i = 1; i < n; i++)
33         {
34             if(lastX >= I[i].y)
35             {
36                 lastX = I[i].x;
37                 ans++;
38                 printf("(%d,%d)\n", I[i].x, I[i].y);
39             }
40         }
41     }
42     return 0;
43 }

 

标签:return,Inteval,int,相交,问题,端点,区间,开区间
来源: https://www.cnblogs.com/narnia/p/11326762.html