贪心算法 解决 活动选择问题

来源:互联网 发布:知乎目标用户 编辑:程序博客网 时间:2024/06/07 00:12
转自:http://download.csdn.net/download/march_on/3625421
</pre><pre code_snippet_id="440959" snippet_file_name="blog_20140802_4_3506359" name="code" class="cpp">#define GREEDY_RECURIVE#ifdef GREEDY_RECURIVE#include <iostream>#include <iomanip>#include <vector>using namespace std;void recursive_activity_selector( const int started[], const int finished[],vector<int>& result, int i,int j);//对vector类型要传引用的!void greedy_activity_selector( const int started[], const int finished[],vector<int>& result, int i,int j); int main( void ){const int activityNum = 11;int started[] = { -1,1,3,0,5,3,5,6,8,8,2,12,INT_MAX };int finished[] = { 0,4,5,6,7,8,9,10,11,12,13,14,INT_MAX };vector<int> result;#ifdef RECURIVErecursive_activity_selector( started, finished, result, 0, activityNum+1); #elsegreedy_activity_selector( started, finished, result, 0, activityNum+1); #endiffor( vector<int>::iterator iter = result.begin(); iter != result.end(); ++iter )cout << setw(3) << *iter ;return 0;}void recursive_activity_selector( 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( started[l] >= finished[i] && finished[l] <= started[j] ) {result.push_back(l);break;}}recursive_activity_selector( started, finished, result, l, j );}void greedy_activity_selector( const int started[], const int finished[], vector<int>& result, int i, int j ){int l;for( l = i+1; l < j; ++l ){if( started[l] >= finished[i] && finished[l] <= started[j] ){result.push_back(l);i = l;}}}#endif


输出结果

1 4 8 11


0 0
原创粉丝点击