您的位置:首页 > 编程语言 > C语言/C++

贪心算法-活动选择

2012-12-03 22:21 281 查看
问题描述
问题来自算法导论16.1。
几个相互竞争的活动进行调度,他们要求以独占的方式使用某一公共资源。调度的目标是找出一个最大的相互兼容活动集合。
思想:总是选择剩余活动中具有最早结束时间的活动。

/***************************************************************************** Copyright: 2012, USTC File name: main.cpp Description:Arrange activities by greedy method. Author:Silang Quan Version: 1.0 Date: 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 method void 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++