会场安排问题

假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。

设计一个算法进行安排。

测试用例:

5(活动数目)

1 23

12 28

25 35

27 80

36 50

输出:

#include<stdio.h>
#define n 5
int judge(int *flag){//判断活动是否已经安排完
	for(int i=0;i<n;i++)//如果有一个为0,则为0,全为一则返回一
		if(flag[i]==0)
			return 0;
		return 1;
}

int main()
{
	int meet[5][2]={{1,23},{12,28},{25,35},{27,80},{36,50}};
	int i,j,k;
	int flag[n]={0};
	int count=0;
	for(i=0;i<n;i++){
		for(j=i+1;j<n;j++){//冒泡排序
			if(meet[i][1]>meet[j][1]){//结束时间比较,较晚的在后边
				int temp=meet[i][0];
				meet[i][0]=meet[j][0];
				meet[j][0]=temp;
                temp=meet[i][1];
				meet[i][1]=meet[j][1];
				meet[j][1]=temp;
			}		 
		}
	}
	while(judge(flag)==0){//判断活动是否已经找到会议室
		count++;
		i=0;
		while(flag[i]==1)
			i++;
		flag[i]=1;
		int end=meet[i][1];//结束时间
		for(j=i+1;j<n;j++)//判断一个会场可以接纳那几个活动
			if(flag[j]==0&&meet[j][0]>=end){
				flag[j]=1;//表j活动找到会场
				end=meet[j][1];
			}
	}
	printf("所需的最少会场数为:%d\n",count);
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值