問題描述
問題來自演算法導論16.1。
幾個相互競爭的活動進行調度,他們要求以獨佔的方式使用某一公用資源。調度的目標是找出一個最大的相互相容活動集合。
思想:總是選擇剩餘活動中具有最早結束時間的活動。
/*****************************************************************************Copyright: 2012, USTCFile name: main.cppDescription:Arrange activities by greedy method.Author:Silang QuanVersion: 1.0Date: 2012.12.3*****************************************************************************/#include<iostream>#include<vector>using namespace std;//Iteration Method assume a[1] is the first activity meet the need.int GreedySelect(int *s,int *f,int length,int *a){int i,j=2;a[1]=1;i=1;for(int m=2;m<=length;m++){if(s[m]>=f[i]){a[j++]=m;i=m;}}return j;}//Recursion methodvoid GreedySelect2(int *s,int *f,int i,int j,vector<int>& result)// const int started[], const int finished[],vector<int>& result, int i,int j){ if( i >= j ) return; int l; for( l = i+1; l < j; ++l ) { if( s[l] >= f[i] ) { result.push_back(l); break; } } GreedySelect2(s,f,l,j,result);}int main(){int s[12]={0,1,3,0,5,3,5,6,8,8,2,12};int f[12]={0,4,5,6,7,8,9,10,11,12,13,14};//test1/*int a[13];int i=GreedySelect(s,f,11,a);for(int j=1;j<i;j++){cout<<a[j]<<" ";}cout<<endl;*///test2 vector<int> result; GreedySelect2(s,f,0,12,result); for(vector<int>::iterator iter=result.begin();iter!=result.end();++iter) { cout<<*iter<<" "; } cout<<endl;}
參考:
演算法導論,第二版,機械工業出版社
演算法導論-貪心演算法-http://blog.csdn.net/liuzhanchen1987/article/details/7854826