0
点赞
收藏
分享

微信扫一扫

贪心算法——会场安排问题

罗子僧 2022-05-02 阅读 75

假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排。

输入:第1行有一个正整数k,表示有k个待安排的活动。接下来的k行中,每行两个正整数,分别表示k个待安排活动的开始时间和结束时间

输出:所用的最少会场数。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排。
//输入:第1行有一个正整数k,表示有k个待安排的活动。
//接下来的k行中,每行两个正整数,分别表示k个待安排活动的开始时间和结束时间
//输出:所用的最少会场数。

int main(){
    int k,i,j,t,c;
    printf("请输入待安排活动数:");
    scanf("%d",&k); //活动数0
    printf("请输入待安排活动的开始时间和结束时间:\n");
    int huodong[k][2];//活动开始/结束时间
    for(i=0;i<k;i++)
    {
        scanf("%d %d",&huodong[i][0],&huodong[i][1]);
    }
    for(i=0;i<k-1;i++)  //冒泡排序按开始时间对活动进行排序
    {
        c=0;    //早停标志变量
        for(j=0;j<k-1-i;j++)
        {
            if(huodong[j][0]>huodong[j+1][0])
            {
                c=1;
                t=huodong[j][0];
                huodong[j][0]=huodong[j+1][0];
                huodong[j+1][0]=t;
                t=huodong[j][1];
                huodong[j][1]=huodong[j+1][1];
                huodong[j+1][1]=t;
            }
        }
        if(c==0)
            break;
    }
    int huichang[k];//最多k个会场,数组储存结束时间
    int top=0; //使用的会场数
    for(i=0;i<k;i++)//所有活动
    {
        c=0;    //活动是否安排标志变量
        for(j=0;j<top;j++)//对所有会场
        {
            //会场当前活动结束时间比活动开始时间早
            if(huichang[j]<huodong[i][0])
            {
                //在该会场安排活动
                c=1;
                //更改当前会场活动结束时间
                huichang[j]=huodong[i][1];
                break;//不用看其余会场
            }
        }
        if(c==0)//如果活动还没有被安排
        {
            //新开会场供活动使用
            huichang[top]=huodong[i][1];
            top++;
        }
    }
    printf("使用会场数:%d 个",top);
    return 0;
}
举报

相关推荐

0 条评论