转自: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 RECURIVE
recursive_activity_selector( started, finished, result, 0, activityNum+1);
#else
greedy_activity_selector( started, finished, result, 0, activityNum+1);
#endif
for( 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