zoukankan      html  css  js  c++  java
  • 贪心算法活动安排

    该算法是一个比较经典的算法,是关于活动的安排,题目是这样的:若干活动等待安排,每个活动有一个开始和结束的时间,要求选出一个活动的序列使得在指定的时间区间内能够完成更多的活动。

    算法的代码如下:

    #include <iostream>
    using namespace std;
    
    typedef struct active
    {
        int num;      //活动编号
        int starttime;       //活动开始时间
        int endtime;         //活动结束时间
        bool flag;
    } active;
    void SortActive(active *meeting,int num)
    {
        int tempnum,tempstarttime,tempendtime;
    
        for(int i=0;i<num-1;i++)
            for(int j=0;j<num-i-1;j++)
            if(meeting[j].endtime>meeting[j+1].endtime)
            {
                tempnum=meeting[j].num;
                tempstarttime=meeting[j].starttime;
                tempendtime=meeting[j].endtime;
    
                meeting[j].num=meeting[j+1].num;
                meeting[j].starttime=meeting[j+1].starttime;
                meeting[j].endtime=meeting[j+1].endtime;
    
                meeting[j+1].num=tempnum;
                meeting[j+1].starttime=tempstarttime;
                meeting[j+1].endtime=tempendtime;
            }
     }
    void SearchMostMeetingWay(active *meeting,int num)
    {
        SortActive(meeting,num);
        int j=0;
        meeting[j].flag=true;
        for(int i=1;i<num;i++)
        if(meeting[j].endtime<meeting[i].starttime)
        {
          meeting[i].flag=true;
          j=i;
        }
        else
        meeting[i].flag=false;
    }
    int main()
    {
        cout<<"Please input the num of active:";
        int num,sum=0;
        cin>>num;
        active *meeting=new active[num];
        for(int i=0;i<num;i++)
        {
            meeting[i].num=i+1;
            cout<<"Please input the starttime and endtime:";
            cin>>meeting[i].starttime>>meeting[i].endtime;
        }
        SearchMostMeetingWay(meeting,num);
    
        for(int i=0;i<num;i++)
        if(meeting[i].flag==true)
        {
            cout<<meeting[i].num<<" "<<meeting[i].starttime<<" "<<meeting[i].endtime<<endl;
            sum++;
        }
        cout<<"The max num of active is "<<sum<<endl;
        return 0;
    }
    
    态度决定高度,细节决定成败,
  • 相关阅读:
    Buddy内存分配算法
    牛顿迭代法 求方程根
    卡特兰数(Catalan)
    【Python图像】给你的头像+1
    【Python网络爬虫二】使用urllib2抓去网页内容
    【Python网络爬虫一】爬虫原理和URL基本构成
    【Python基础学习六】函数
    【Python基础学习五】列表,元祖,字典
    Linux-文件和目录操作命令
    VMware中的Ubuntu网络设置
  • 原文地址:https://www.cnblogs.com/lxk2010012997/p/3011974.html
Copyright © 2011-2022 走看看