亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++超詳細講解貪心策略的設(shè)計及解決會場安排問題

 更新時間:2022年05月27日 10:44:16   作者:對象new不出來  
為了更好的應(yīng)對《算法設(shè)計與分析》這門課程,我把書上以及老師講過的案例都詳細的做一個重現(xiàn)及解剖,讓你熟記每一個潛在的考點,希望能給大家?guī)椭?/div>

問題描述

設(shè)有n個會議的集合C={1,2,…,n},其中每個會議都要求使用同一個資源(如會議室),而在同一時間內(nèi)只能有一個會議使用該資源。每個會議i都有要求使用該資源的起始時間bi和結(jié)束時間ei,且bi < ei 。如果選擇了會議i使用會議室,則它在半開區(qū)間[bi, ei)內(nèi)占用該資源。如果[bi, ei)與[bj , ej)不相交,則稱會議i與會議j是相容的。會場安排問題要求在所給的會議集合中選出最大的相容活動子集,也即盡可能地選擇更多的會議來使用資源。

貪心策略

1、選擇最早開始時間且不與已安排會議重疊的會議

2、選擇使用時間最短且不與已安排會議重疊的會議

3、選擇具有最早結(jié)束時間且不與已安排會議重疊的會議

這里我選取第三種方法

算法設(shè)計

設(shè)有11個會議等待安排,用貪心法找出滿足目標要求的會議集合。這些會議按結(jié)束時間的非減序排列如表所示

11個會議按結(jié)束時間的非減序排列表:

代碼實現(xiàn)

#include <iostream>
#include "會場安排.h"
#define n 11
struct meeting{
	int B;//開始時間
	int E;//結(jié)束時間
};
using namespace std;
int main()
{
	meeting M[n] = { {8,11}, {8,12}, {2,13}, {12,14}, {1,4},
		           {3,5}, {0,6}, {5,7}, {3,8}, {5,9}, {6,10} };
	for(int i=0;i<n;i++)
		for(int j=0;j<n-i-1;j++)
			if (M[j].E > M[j + 1].E) {
				meeting T;
				T = M[j]; M[j]= M[j+ 1]; M[j+1]= T;
			}
	int allowedTime = 0;
	for (int i = 0,j=0; i < n; i++) {
		if (M[i].B > allowedTime) {
			j++;
			cout << "安排的第"<<j<<"個會議號是 " << i+1 <<" 此會議開始時間為:" << M[i].B 
				<<" 此會議結(jié)束時間是:" << M[i].E << endl;
			allowedTime = M[i].E;
		}
	}
}

選擇結(jié)構(gòu)體

定義meeting結(jié)構(gòu)體,只設(shè)置會議開始時間B和結(jié)束時間E即可。

隨機輸入會議

n 為11

meeting M[n] = { {8,11}, {8,12}, {2,13}, {12,14}, {1,4},

{3,5}, {0,6}, {5,7}, {3,8}, {5,9}, {6,10} };

按結(jié)束時間排序

冒泡排序?qū)崿F(xiàn)即可:

for(int i=0;i<n;i++)

for(int j=0;j<n-i-1;j++) if (M[j].E > M[j + 1].E)

{

meeting T; T = M[j]; M[j]= M[j+ 1]; M[j+1]= T;

}

這里的中間變量必須設(shè)置為 meeting 類型,以便于將會議的所有屬性都交換

最終會議確定

int allowedTime = 0;
    for (int i = 0,j=0; i < n; i++) {
        if (M[i].B > allowedTime) {
            j++;
            cout << "安排的第"<<j<<"個會議號是 " << i+1 <<" 此會議開始時間為:" << M[i].B 
                <<" 此會議結(jié)束時間是:" << M[i].E << endl;
            allowedTime = M[i].E;
        }
    }

先將會議開始時間設(shè)置為0,只要把按結(jié)束時間升序排列的第一個大于0的開始時間加到第一個內(nèi)容哦即可,隨后將第一個會議的結(jié)束時間設(shè)置為allowedTime,產(chǎn)生下一個不與第一個會議時間沖突的會議;然后自己加點輸出語句,美觀的運行出來結(jié)果就好了。

結(jié)束語

這算是貪心法第一個案例,也是比較好理解的一個案例,希望大家分析后都能有自己的收獲,下篇博客再見,覺得好就鼓勵鼓勵博主吧

到此這篇關(guān)于C++超詳細講解貪心策略的設(shè)計及解決會場安排問題的文章就介紹到這了,更多相關(guān)C++貪心策略內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實現(xiàn)鏈隊列

    C語言實現(xiàn)鏈隊列

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)鏈隊列,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • C++中的繼承模式深入詳解

    C++中的繼承模式深入詳解

    這篇文章主要介紹了C++中的繼承模式深入詳解。繼承是OOP設(shè)計中的重要概念。在C++語言中,派生類繼承基類有三種繼承方式:私有繼承(private)、保護繼承(protected)和公有繼承(public)。
    2021-03-03
  • 關(guān)于C++使用std::chrono獲取當(dāng)前秒級/毫秒級/微秒級/納秒級時間戳問題

    關(guān)于C++使用std::chrono獲取當(dāng)前秒級/毫秒級/微秒級/納秒級時間戳問題

    這篇文章主要介紹了C++使用std::chrono獲取當(dāng)前秒級/毫秒級/微秒級/納秒級時間戳,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • C語言中二維數(shù)組作為函數(shù)參數(shù)來傳遞的三種方法

    C語言中二維數(shù)組作為函數(shù)參數(shù)來傳遞的三種方法

    這篇文章主要給大家介紹了關(guān)于C語言中二維數(shù)組作為函數(shù)參數(shù)來傳遞的三種方法,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用C語言有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 詳解vs2022創(chuàng)建及調(diào)用.lib的方法

    詳解vs2022創(chuàng)建及調(diào)用.lib的方法

    這篇文章主要介紹了vs2022創(chuàng)建及調(diào)用.lib的方法,調(diào)用Lib的原則就是可以讓編譯器找到頭文件和庫文件的目錄,并正確引入,本文給大家詳細講解需要的朋友可以參考下
    2022-11-11
  • VC下通過系統(tǒng)快照實現(xiàn)進程管理的方法

    VC下通過系統(tǒng)快照實現(xiàn)進程管理的方法

    這篇文章主要介紹了VC下通過系統(tǒng)快照實現(xiàn)進程管理的方法,較為詳細的講述了VC下通過系統(tǒng)快照實現(xiàn)進程管理的原理與具體實現(xiàn)方法,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • Qt操作SQLite數(shù)據(jù)庫的教程詳解

    Qt操作SQLite數(shù)據(jù)庫的教程詳解

    SQLite是一款開源、輕量級、跨平臺的數(shù)據(jù)庫,無需server,無需安裝和管理配置。它的設(shè)計目標是嵌入式的,所以很適合小型應(yīng)用,也是Qt應(yīng)用開發(fā)種常用的一種數(shù)據(jù)庫。本文為大家介紹了Qt操作SQLite數(shù)據(jù)庫的示例,希望對大家有所幫助
    2022-12-12
  • 使用C++實現(xiàn)位圖處理

    使用C++實現(xiàn)位圖處理

    本文介紹了如何使用C++語言處理位圖圖像,包括讀取、修改、保存等操作。通過具體的代碼示例,讀者可以學(xué)習(xí)到如何利用C++中的位運算、數(shù)組和文件操作等知識點完成位圖處理任務(wù)。同時,本文也提供了一些常用的圖像處理算法供讀者參考,幫助讀者更好地理解位圖處理過程
    2023-04-04
  • C++ 兩個vector對象拼接方式

    C++ 兩個vector對象拼接方式

    這篇文章主要介紹了C++ 兩個vector對象拼接方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 一文搞懂C++ 動態(tài)內(nèi)存

    一文搞懂C++ 動態(tài)內(nèi)存

    這篇文章主要介紹了C++ 動態(tài)內(nèi)存的的相關(guān)資料,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06

最新評論