您的位置:首页 > 其它

区间相交问题

2015-11-25 10:24 274 查看
#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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: