#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
/*
与活动安排问题类似,每次选取右端点坐标最小的闭区间,保留该闭区间,并将与其相交
的闭区间删除
*/
struct Zone
{
int start;
int end;
bool operator < (const Zone &z) const
{
return end < z.end;
}
};
Zone zone[50];
int greedy(int n)
{
sort(zone, zone+n);
int i;
int count = 0;
int temp = zone[0].end;
for(i=1; i<n; i++)
{
if(zone[i].start <= temp)
count++;
else
temp = zone[i].end;
}
return count;
}
int main()
{
ifstream fin("区间相交.txt");
cout << "输入区间数:";
int n;
fin >> n; cout << n;
cout << "\n输入各个区间端点:\n";
int i;
for(i=0; i<n; i++)
{
fin >> zone[i].start >> zone[i].end;
if(zone[i].start > zone[i].end)
swap(zone[i].start, zone[i].end);
cout << zone[i].start << " " << zone[i].end << endl;
}
cout << "去掉的最少闭区间数为:" << greedy(n);
cout << endl;
fin.close();
return 0;
}
区间相交问题
最新推荐文章于 2022-10-30 23:32:44 发布