/*******************************************
贪心法 选择不相交区间
输入n个区间 尽最大可能的选择多个没有公共交点的区间
取第一个可用区间永远是对的
********************************************/
#include<stdio.h>
#include<stdlib.h>
struct qujian{
float begin ,end;
int useful;
};//useful表示是否可用
int main()
{
int n,i,j,num;
struct qujian *buffer,temp;
scanf("%d",&n);
buffer=(struct qujian*)malloc(sizeof(struct qujian)*n);
printf("请输入n个区间的初始以及终止位置:\n");
for(i=0;i<n;i++)
{
scanf("%f %f",&(buffer[i].begin),&(buffer[i].end));
buffer[i].useful=1;//1表示区间处于可用状态
}
//进入排序函数 按照终止位置的大小进行排序
for(i=0;i<n-1;i++)
{
num=i;
for(j=i+1;j<n;j++)
{
if(buffer[num].end>buffer[j].end)
{
num=j;
}
}
if(num!=i)
{
temp=buffer[num];
buffer[num]=buffer[i];
buffer[i]=temp;
}
}
num=0;//计数器
for(i=0; i<n;i++)
{
if(buffer[i].useful==0)
continue;
printf("%5.3f至%5.3f的区间可取\n",buffer[i].begin,buffer[i].end);
num++;
for(j=i+1;j<n;j++)
{
if(buffer[j].begin<buffer[i].end)
buffer[j].useful=0;
}
}
printf("共可取%d个区间",num);
return 0;
}
测试结果: