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

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

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

問題描述

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

貪心策略

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

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

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

這里我選取第三種方法

算法設計

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

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

代碼實現(xiàn)

#include <iostream>
#include "會場安排.h"
#define n 11
struct meeting{
	int B;//開始時間
	int E;//結束時間
};
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 
				<<" 此會議結束時間是:" << M[i].E << endl;
			allowedTime = M[i].E;
		}
	}
}

選擇結構體

定義meeting結構體,只設置會議開始時間B和結束時間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} };

按結束時間排序

冒泡排序?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;

}

這里的中間變量必須設置為 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 
                <<" 此會議結束時間是:" << M[i].E << endl;
            allowedTime = M[i].E;
        }
    }

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

結束語

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

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

相關文章

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

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

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

    C語言簡明講解變量的屬性

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

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

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

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

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

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

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

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

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

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

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

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

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

    C語言由淺入深理解指針

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

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

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

最新評論

米泉市| 高碑店市| 丰台区| 建宁县| 资兴市| 江永县| 吉水县| 乌海市| 和平县| 安平县| 安义县| 贡嘎县| 穆棱市| 庆阳市| 远安县| 香港| 崇义县| 银川市| 常山县| 北海市| 靖边县| 铁力市| 八宿县| 宝坻区| 卢氏县| 阿克| 岳西县| 恩平市| 象州县| 澎湖县| 乐陵市| 惠来县| 渑池县| 衡南县| 正宁县| 昭苏县| 凤庆县| 陕西省| 汕尾市| 新泰市| 新宁县|