C++源码:
#include<iostream>
#include<algorithm>
#include<conio.h>
using namespace std;
struct Meet{
int beg;
int end;
int num;
}meet[100];
class setMeet{
public:
void init();
void solve();
private:
int n,ans;//n代表会议总数,ans代表最大的会议安排总数
};
void setMeet::init()
{
int s,e;//会议开始和结束时间
cout<<"输入会议总数n=:"<<endl;
cin>>n;
int i;
cout<<"输入会议开始时间和结束时间,以空格分开:"<<endl;
for(i=0;i<n;++i)
{
cin>>s>>e;
meet[i].beg=s;
meet[i].end=e;
meet[i].num=i+1;
}
}
bool cmp(Meet x,Meet y){
if(x.end==y.end){
return x.beg>y.beg;
}
else
return x.end<y.end;
}
void setMeet::solve(){
sort(meet,meet+n,cmp);
cout<<"排完序的会议时间如下:"<<endl;
int i;
cout<<"会议编号"<<" 开始时间 "<<" 结束时间 "<<endl;
for(i=0;i<n;i++)
{
cout<<" "<<meet[i].num<<"\t\t"<<meet[i].beg<<"\t"<<meet[i].end<<endl;
}
cout<<"-----------------------------------------------"<<endl;
cout<<"选择会议的过程:"<<endl;
cout<<" 选择第"<<meet[0].num<<"个会议"<<endl;//选中了第一个会议
ans=1;
int last=meet[0].end;
for(i=1;i<n;++i)
{
if(meet[i].beg>=last)
{
//如果会议i的开始时间大于最后一个选中的会议的结束时间,则:
ans++;
last=meet[i].end;
cout<<" 选择第"<<meet[i].num<<"个会议"<<endl;
}
}
cout<<"最多可以安排"<<ans<<"个会议"<<endl;
}
int main(){
setMeet sm;
sm.init();//读入数据
sm.solve();//贪心算法求解
getch();
return 0;
}
python源码:
beg=[]#会议开始时间
end=[]#会议结束时间
num=[]#会议编号
n=int(input("请输入会议总个数n="))
print("请输入每个会议的开始时间beg和结束时间end,输入时用空格隔开!")
for i in range(n):
s,e=(input("该会议开始时间beg & 结束时间end :").split())
beg.append(int(s))
end.append(int(e))
num.append(i+1)
meeting=[[end[i],beg[i],num[i]] for i in range(n)]
print("每个会议对应的结束时间、开始时间、会议编号如下:\n",meeting)
# def cmp(a,b):
# for i in range(n):
# if meeting[i][0]==meeting[i+1][0] :
# return meeting[i][1]>meeting[i+1][1]
# else:
# return meeting[i][0]<meeting[i+1][0]
meeting.sort()
print("每个会议按照最早结束时间(若会议结束时间相同)排序后,每个会议对应的结束时间、开始时间、会议编号如下:\n",meeting)
last=meeting[0][0]
ans=1#代表已安排的会议个数
print("选中第一个会议后,相容会议按照最早结束时间(若会议结束时间相同)排序后,每个会议对应的结束时间、开始时间、会议编号如下:")
print("会议编号 开始时间 结束时间 选择过程")
print(" ",meeting[0][2],"\t\t",meeting[0][1],"\t\t\t",meeting[0][0],"\t\t",end="")
print("选择第%d个会议"%meeting[0][2])
for i in range(1,n):
if meeting[i][1]>=last:
ans+=1
last=meeting[i][0]
print(" ",meeting[i][2],"\t\t",meeting[i][1],"\t\t\t",meeting[i][0],"\t\t",end="")
print("选择第%d个会议"%meeting[i][2])
print("----------------------------------------")
print("贪心选择,最多可以安排%d个会议"%ans)