完整程序:
#include<bits/stdc++.h>
using namespace std;
//計算活動安排問題的貪心算法
struct action{
int s; //起始時間
int f; //結束時間
int index; //活動的編號
};
bool cmp(const action &a, const action &b)//按活動的結束時間升序排序
{
if (a.f<=b.f) return true;
return false;
}
//形參數組b用來記錄被選中的活動
void GreedySelector(int n, action a[], bool b[])
{
b[1] = true;//第1個活動是必選的
//記錄最近一次加入到集合b中的活動
int preEnd=1;
for(int i=2;i<=n;i++)
if(a[i].s>=a[preEnd].f)
{
b[i]=true;
preEnd=i;
}
}
int main(){
action a[1000];
bool b[1000];
cout<<"請輸入活動的數量"<<endl;
int n;
cin>>n;
cout<<"請依次輸入活動的開始時間和結束時間:"<<endl;
for(int i=1;i<=n;i++){
cin>>a[i].s>>a[i].f;
}
for(int i=1;i<=n;i++){
a[i].index=i;//記錄活動的初始編號
}
sort(a,a+n+1,cmp);
GreedySelector(n,a,b);
cout<<"選中的活動編號依次爲:"<<endl;
for(int i=1;i<=n;i++){
if(b[i])
cout<<a[i].index<<" ";
}
}