区间相交问题

问题描述:

      给定x 轴上n 个闭区间。去掉尽可能少的闭区间,使剩下的闭区间都不相交。    

数据输入:

  第一行是正整数n,表示闭区间数。接下来的n行中,每行有2 个整数,分别表示闭区间的2个端点。

结果输出:

   计算出的去掉的最少闭区间数。

   输出为需要去掉的区间数

代码:

#include <iostream>
#include <algorithm>
using namespace std;
struct que
{
    int x,y;
};
//排序规则
int tmp(const que &a,const que &b)
{
    if(a.y==b.y)
    return a.x<=b.x;
    return a.y<b.y;
}
int main()
{
    int n;
    cin>>n;
    que s[n];
    for(int i=0;i<n;i++)
    {
        cin>>s[i].x>>s[i].y;
        if(s[i].x>s[i].y)
        {
            int t=s[i].x;
            s[i].x=s[i].y;
            s[i].y=t;
        }
    }   //输入并处理,前小后大
    sort(s,s+n,tmp);    //排序
    int sum=1;
    for(int i=0;i<n-1;i++)
    {
        if(s[i].y<s[i+1].x)
        {
            sum++;        //相连区间数
        }
    }
    cout<<n-sum<<endl;     //去掉的区间数
    return 0;
}
原文地址:https://www.cnblogs.com/llsq/p/7688259.html