会场安排问题 假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排。(这个问题实际上是著名的图着色问题。若将每一个活动作为图的一个顶点,不相容活动间用边相连。使相邻顶点着有不同颜色的最小着色数,相应于要找的最小会场数。) 对于给定的k个待安排的活动,计算使用最少会场的时间表。 Input 输入数据的第一行有1 个正整数k(k≤10000),表示有k个待安排的活动。接下来的k行中,每行有2个正整数,分别表示k个待安排的活动开始时间和结束时间。时间以0 点开始的分钟.
#include<iostream>
#include<algorithm>
using namespace std;
struct TIME
{
int start;
int end;
bool flag=0;
};
bool cmp(TIME a,TIME b)
{
if(a.start==b.start)
return a.end<b.end;
return a.start<b.start;
}
int main()
{
int a,b,flag1,jishu1,jishu2;
TIME time[10100];
while(cin>>a&&a)
{
jishu1=0,jishu2=0;
for(int i=0; i<a; i++)
cin>>time[i].start>>time[i].end;
sort(time,time+a,cmp);
for(int i=0; i<a; i++)
{
if(time[i].flag==0)
{
jishu1++;
flag1=time[i].end;
for(int j=i+1; j<a; j++)
{
if(time[j].flag==0)
if(time[j].start>=flag1)
{
time[j].flag=1;
flag1=time[j].end;
jishu1++;
}
}
jishu2++;
}
if(jishu1==a)
break;
}
printf("%d\n",jishu2);
}
}