最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++超詳細(xì)講解貪心策略的設(shè)計(jì)及解決會(huì)場(chǎng)安排問題

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

問題描述

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

貪心策略

1、選擇最早開始時(shí)間且不與已安排會(huì)議重疊的會(huì)議

2、選擇使用時(shí)間最短且不與已安排會(huì)議重疊的會(huì)議

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

這里我選取第三種方法

算法設(shè)計(jì)

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

11個(gè)會(huì)議按結(jié)束時(shí)間的非減序排列表:

代碼實(shí)現(xiàn)

#include <iostream>
#include "會(huì)場(chǎng)安排.h"
#define n 11
struct meeting{
	int B;//開始時(shí)間
	int E;//結(jié)束時(shí)間
};
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<<"個(gè)會(huì)議號(hào)是 " << i+1 <<" 此會(huì)議開始時(shí)間為:" << M[i].B 
				<<" 此會(huì)議結(jié)束時(shí)間是:" << M[i].E << endl;
			allowedTime = M[i].E;
		}
	}
}

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

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

隨機(jī)輸入會(huì)議

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é)束時(shí)間排序

冒泡排序?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 類型,以便于將會(huì)議的所有屬性都交換

最終會(huì)議確定

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

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

結(jié)束語

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

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

相關(guān)文章

  • C語言變長(zhǎng)數(shù)組使用詳解

    C語言變長(zhǎng)數(shù)組使用詳解

    這篇文章主要介紹了C語言變長(zhǎng)數(shù)組使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • C語言簡(jiǎn)明講解變量的屬性

    C語言簡(jiǎn)明講解變量的屬性

    我們知道以在?C?語言中的變量有自己的屬性,只要在定義變量的時(shí)候加上“屬性”關(guān)鍵字即可?!皩傩浴标P(guān)鍵字指明變量的特有意義,但是?register?關(guān)鍵字只是請(qǐng)求寄存器變量,所以不一定會(huì)成功
    2022-04-04
  • C++動(dòng)態(tài)內(nèi)存分配超詳細(xì)講解

    C++動(dòng)態(tài)內(nèi)存分配超詳細(xì)講解

    給數(shù)組分配多大的空間?你是否和初學(xué)C時(shí)的我一樣,有過這樣的疑問。這一期就來聊一聊動(dòng)態(tài)內(nèi)存的分配,讀完這篇文章,你可能對(duì)內(nèi)存的分配有一個(gè)更好的理解
    2022-08-08
  • 淺析C++中的重載,隱藏和覆蓋

    淺析C++中的重載,隱藏和覆蓋

    在C++語言中,函數(shù)扮演著很重要的角色,不管面向過程設(shè)計(jì),還是基于對(duì)象設(shè)計(jì)。本文主要為大家介紹了函數(shù)中重載、覆蓋和隱藏的相關(guān)知識(shí),感興趣的小伙伴可以了解一下
    2022-12-12
  • C語言實(shí)現(xiàn)在控制臺(tái)打印余弦曲線

    C語言實(shí)現(xiàn)在控制臺(tái)打印余弦曲線

    余弦曲線又叫余弦波(cosinwave),是一種來自數(shù)學(xué)三角函數(shù)中的余弦比例的曲線。這篇文章主要為大家介紹了如何在控制臺(tái)繪制余弦曲線,感興趣的可以了解一下
    2023-02-02
  • 一文弄懂C語言如何實(shí)現(xiàn)單鏈表

    一文弄懂C語言如何實(shí)現(xiàn)單鏈表

    單鏈表是由多個(gè)結(jié)點(diǎn)鏈接組成,它的每個(gè)結(jié)點(diǎn)包含兩個(gè)域,一個(gè)數(shù)據(jù)域和一個(gè)鏈接域(地址域),下面這篇文章主要給大家介紹了關(guān)于C語言如何實(shí)現(xiàn)單鏈表的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 利用Matlab制作環(huán)形相冊(cè)效果詳解

    利用Matlab制作環(huán)形相冊(cè)效果詳解

    這篇文章主要為大家介紹了如何利用Matlab制作出環(huán)形相冊(cè)的效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下
    2022-03-03
  • C++浮點(diǎn)數(shù)類型詳情

    C++浮點(diǎn)數(shù)類型詳情

    這篇文章主要介紹了C++浮點(diǎn)數(shù)類型,浮點(diǎn)數(shù)是C++的第二組基本類型,它能夠表示帶小數(shù)部分的數(shù)字。不僅如此,浮點(diǎn)數(shù)的范圍也比int更大,可以表示更大范圍的數(shù)字。下面來我們大家一起來學(xué)習(xí)學(xué)習(xí)內(nèi)容
    2021-11-11
  • C語言由淺入深理解指針

    C語言由淺入深理解指針

    C語言這門課程在計(jì)算機(jī)的基礎(chǔ)教學(xué)中一直占有比較重要的地位,然而要想突破C語言的學(xué)習(xí),對(duì)指針的掌握是非常重要的,本文將具體針對(duì)指針的基礎(chǔ)做詳盡的介紹
    2022-05-05
  • C語言借助EasyX實(shí)現(xiàn)的生命游戲源碼

    C語言借助EasyX實(shí)現(xiàn)的生命游戲源碼

    這篇文章主要介紹了C語言借助EasyX實(shí)現(xiàn)的生命游戲的方法,需要的朋友可以參考下
    2014-07-07

最新評(píng)論

简阳市| 玉林市| 高邮市| 广饶县| 曲麻莱县| 抚顺市| 衡南县| 沁源县| 乐陵市| 江城| 青阳县| 金堂县| 花莲市| 竹溪县| 台南县| 东安县| 印江| 梁山县| 凤山市| 吉木乃县| 南平市| 宁国市| 新民市| 肃北| 泽库县| 西城区| 长岭县| 无锡市| 玉屏| 资阳市| 滨海县| 马边| 那曲县| 广河县| 霍城县| 平定县| 攀枝花市| 荆州市| 汽车| 白沙| 揭西县|