活動安排問題

完整程序:

#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<<" ";
}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章