区间不相交问题
作者:互联网
区间不相交问题:给出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