#include <iostream>
#include <list>
#include <fstream>
using namespace std ;
int const size = 11 ;
class ActivitiesChoices
{
int * s ;
int * f ;
list<int> * Result;
public:
ActivitiesChoices( void ) ;
void SF_time_read( ) ;
void SF_time_set( ) ;
void PECURSIVE_ACTIVITY_SELECTOR( int i ,int n ) ;
void GREEDY_ACTIVITY_SELECTOR();
void Result_Show( ) ;
void Main( ) ;
~ActivitiesChoices( void ) ;
};
ActivitiesChoices::ActivitiesChoices(void)
{
s = new int[size+1] ;
f = new int[size+1] ;
Result =new list<int>;
}
void ActivitiesChoices::SF_time_set( )
{
int a[12]={0,1,3,0,5,3,5,6,8,8,2,12};
int b[12]={0,4,5,6,7,8,9,10,11,12,13,14};
ofstream fileWriter ;
fileWriter.open("data.txt") ;
fileWriter.clear();
int i = 1 ;
fileWriter<<'S';
//fileWriter<<'\n';// 2 个字符
while( i <= size )
{
fileWriter<<a[i];
fileWriter<<'-';
i++;
}
i = 1;
fileWriter<<'\n'; // 3 个字符
fileWriter<<'F';
//fileWriter<<'\n';
while(i<=size)
{
fileWriter<<b[i]<<'-';
i++;
}
fileWriter.close();
}
void ActivitiesChoices::SF_time_read( )
{
ifstream fileReader;
fileReader.open("data.txt");
int i = 1 ;
char c ;
fileReader>>c ;
//fileReader>>c ;// 2个字符
cout<<c ;
while( i<=size )
{
fileReader>>s[i]>>c ;
cout<<s[i]<<' ' ;
i++ ;
}
i = 1 ;
//fileReader>>c ; // 3 个 字符
//cout<<c ;
cout<<endl ;
fileReader>>c ;
cout<<c ;
//fileReader>>c ;
//cout<<c ;
while( i <= size )
{
fileReader>>f[i]>>c ;
cout<<f[i]<<' ' ;
i++ ;
}
cout<<endl ;
fileReader.close() ;
}
// function: 递归
void ActivitiesChoices::PECURSIVE_ACTIVITY_SELECTOR( int i ,int n )
{
int m = i + 1 ;
while( m<=n && s[m]<f[i] )
m = m+1 ;
if( m <= n )
{
Result->push_front(m) ;
this->PECURSIVE_ACTIVITY_SELECTOR(m,n) ;
}
}
void ActivitiesChoices::Result_Show()
{
while(! Result->empty() )
{
cout<<Result->back()<<endl ;
Result->pop_back() ;
}
}
// function: 非递归
void ActivitiesChoices::GREEDY_ACTIVITY_SELECTOR( )
{
Result->clear();
Result->push_front(1);
int i =1 ;
int m ;
for( m = 2 ; m <= size ; m++ )
{
if( s[m]>=f[i] )
{
Result->push_front(m) ;
i = m ;
}
}
}
void ActivitiesChoices::Main( )
{
this -> SF_time_set() ;
this -> SF_time_read() ;
this -> PECURSIVE_ACTIVITY_SELECTOR( 0 ,size );
this -> Result_Show();
cout<<endl;
this -> GREEDY_ACTIVITY_SELECTOR();
this -> Result_Show();
}
ActivitiesChoices::~ActivitiesChoices(void)
{
delete [] s,f ;
}
int main()
{
ActivitiesChoices * AC = new ActivitiesChoices();
AC ->Main();
delete AC;
system("pause");
return 0 ;
}