關於安排會議,利用貪心算法,選擇具備最先結束時間且與已安排內容相容的會議安排ios
參見:《趣學算法》,陳小玉,2.4算法
運行結果:ide
代碼:spa
頭文件:code
#pragma once #include<algorithm> #include<iostream> class setMeet { public: void init(); void solve(); private: int n, ans; //n:會議總數 ans:最大的安排會議總數 };
源文件:blog
1 #include "setMeet.h" 2 using namespace std; 3 4 struct Meet 5 { 6 int beg; //記錄會議的開始時間 7 int end; 8 int num; //會議編號 9 }meet[1000]; //會議的最大個數爲1000 10 11 12 void setMeet::init() //讀入數據 13 { 14 int s, e; 15 cout << "輸入會議總數: " << endl; 16 cin >> n; 17 int i; 18 cout << "輸入會議的開始時間與結束時間,以空格分開:" << endl; 19 for (i = 0; i < n; ++i) 20 { 21 cin >> s >> e; 22 meet[i].beg = s; 23 meet[i].end = e; 24 meet[i].num = i + 1; 25 } 26 } 27 28 bool cmp(Meet x, Meet y) 29 { 30 if (x.end == y.end) 31 return x.beg > y.beg; 32 return x.end < y.end; 33 } 34 35 void setMeet::solve() 36 { 37 sort(meet, meet + n, cmp);//對會議按結束時間排序 38 cout << "拍完序的會議時間以下:" << endl; 39 int i; 40 cout << "會議編號" << " 開始時間" << " 結束時間" << endl; 41 for (i = 0; i < n; i++) 42 { 43 cout << " " << meet[i].num << "\t\t" << meet[i].beg << "\t" << meet[i].end << endl; 44 } 45 cout << "----------------------------------------------------------------" << endl; 46 cout << "選擇的會議 的過程:" << endl; 47 cout << " 選擇第" << meet[0].num << "個會議" << endl;//選中了第一個會議 48 ans = 1; 49 int last = meet[0].end;//記錄剛剛選中的會議的結束時間 50 for (i = 1; i < n; i++) 51 { 52 if (meet[i].beg >= last) 53 { 54 ans++; 55 last = meet[i].end; 56 cout << " 選擇第" << meet[i].num << "個會議" << endl; 57 } 58 } 59 cout << "最多能夠安排" << ans << "個會議" << endl; 60 61 }
主文件:排序
#include"setMeet.h" using namespace std; int main() { setMeet sm; sm.init(); sm.solve(); cin.ignore(); cin.ignore(); cin.ignore(); return 0; }