国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

C++貪心算法實(shí)現(xiàn)活動(dòng)安排問題(實(shí)例代碼)

2020-01-26 11:45:14
字體:
供稿:網(wǎng)友

貪心算法

貪心算法(又稱貪婪算法)是指,在對(duì)問題求解時(shí),總是做出在當(dāng)前看來是最好的選擇。也就是說,不從整體最優(yōu)上加以考慮,他所做出的是在某種意義上的局部最優(yōu)解。

貪心算法不是對(duì)所有問題都能得到整體最優(yōu)解,關(guān)鍵是貪心策略的選擇,選擇的貪心策略必須具備無(wú)后效性,即某個(gè)狀態(tài)以前的過程不會(huì)影響以后的狀態(tài),只與當(dāng)前狀態(tài)有關(guān)。

具體代碼如下所示:

#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);    //防止輸出的數(shù)字使用科學(xué)計(jì)數(shù)法  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;}

總結(jié)

以上所述是小編給大家介紹的C++貪心算法實(shí)現(xiàn)活動(dòng)安排問題,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)武林網(wǎng)網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 鹤山市| 胶南市| 海盐县| 朝阳区| 于田县| 内黄县| 安平县| 宜宾县| 文水县| 尉氏县| 托克托县| 溧阳市| 新龙县| 汽车| 高雄市| 大兴区| 措勤县| 合水县| 大关县| 宁津县| 临汾市| 景德镇市| 松原市| 开阳县| 武城县| 堆龙德庆县| 扶风县| 富源县| 泾源县| 新沂市| 伊川县| 淅川县| 罗定市| 吴堡县| 望谟县| 绥芬河市| 五常市| 正安县| 永寿县| 聂荣县| 措勤县|