yuanran0 2019-11-04
_(:з」∠)_
#include <cstdio>
#include <iostream>
#include <ctime>
#include <windows.h>
#include <algorithm>
#include <fstream>
using namespace std;
struct activity
{
int no;
int start;
int finish;
};
bool cmp(const activity &x, const activity &y)
{
return x.finish<y.finish;//从小到大排<,若要从大到小排则>
}
int greedySelector(int m,int solution[],struct activity activity[]){
int number = 1;
solution[0] = 1;
int i,j = 0,counter = 1;
for(i = 1;i < m ;i++)
{
if(activity[i].start >=activity[j].finish)
{
solution[i] = 1;
j = i;
counter++;
}
else
solution[i] = 0;
}
cout << "The amount of activities is:"<<counter<<endl;
cout << "The solution is:";
for(i = 0 ;i < m ;i++)
{
if (solution[i] == 1)
{
cout << activity[i].no <<" ";
}
}
return counter;
}
int main(void)
{
LARGE_INTEGER nFreq;
LARGE_INTEGER nBeginTime;
LARGE_INTEGER nEndTime;
ofstream fout;
srand((unsigned int)time(NULL));
int m,i,j,t;
double cost;
cout << "Please enter the number of times you want to run the program:";
cin >> t;
fout.open("activity.txt",ios::app);
if(!fout){
cerr<<"Can not open file ‘activity.txt‘ "<<endl;
return -1;
}
fout.setf(ios_base::fixed,ios_base::floatfield); //防止输出的数字使用科学计数法
for (j = 0;j < t;j++)
{
cout << "——————————————————The "<< j + 1 << "th test —————————————————"<<endl;
m = 1 + rand()%100000;
fout<<m<<",";
int solution[m];
activity activity[m];
for( i = 0;i < m;i++)
{
activity[i].no = i+1;
activity[i].start = 1 + rand()%1000;
while(1)
{
activity[i].finish = 1 + rand()%10000;
if(activity[i].finish > activity[i].start) break;
}
}
QueryPerformanceFrequency(&nFreq);
QueryPerformanceCounter(&nBeginTime);
sort(activity,activity+m,cmp);
greedySelector(m,solution,activity);
QueryPerformanceCounter(&nEndTime);
cost=(double)(nEndTime.QuadPart - nBeginTime.QuadPart) / (double)nFreq.QuadPart;
fout << cost << endl;
cout << "\nThe running time is:" << cost << " s" << endl;
}
fout.close();
cout << endl << endl;
cout << "Success!" << endl;
return 0;
}