图着色问题贪心算法c语言,区间图着色问题(贪心算法)C++实现
区间图着色问题
问题描述:假设要用很多个教室对一组活动进行调度。我们希望使用尽可能少的教室来调度所有活动。请给出一个算法,来确定哪一个活动使用哪一间教室。
这个问题也被称为区间图着色问题,即相容的活动着同色,不相容的着不同颜色,使得所用颜色数最少。
//贪心算法
#include "stdafx.h"
#include
#define N 100
using namespace std;
struct Activity
{
int number; //活动编号
int begin; //活动开始时间
int end; //活动结束时间
bool flag;//此活动是否被选择
int roomNum; //此活动在哪间教室举行
};
//对于活动集,按照结束时间递增排序,使用快速排序
void fast_sort(Activity *act,int f,int t)
{
if(f
{
int i = f-1,j = f;
Activity a = act[t];
while(j
{
if(act[j].end<=a.end)
{
i++;
Activity temp1 = act[i];
act[i] = act[j];
act[j] = temp1;
}
j++;
}
Activity temp2 = act[t];
act[t] = act[i+1];
act[i+1] = temp2;
fast_sort(act,f,i);
fast_sort(act,i+2,t);
}
}
//把每一个相容的活动集添加到一个教室,使得教室数目最少
int select_room(Activity *act,int *time,int n)
{
int i = 1;
int j = 1;
int sumRoom;
//目前所用的教室数目
sumRoom = 1;
int sumAct;
//目前有多少活动被选择了
sumAct = 1;
//教室1目前最晚时间为排在最前面的活动的结束时间
time[1] = act[0].end;
//最先结束的活动放在教室1中
act[0].roomNum = 1;
for(i=1;i
{
for(j=1;j<=sumRoom;j++)
{
//如果活动act[i]的开始时间大于等于j教室目前的最晚结束时间且此活动还没有被选择,
//则此活动与目前这间教室里面的活动是兼容的,可以加入进去
if((act[i].begin>=time[j])&&(!act[i].flag))
{
//此活动的教室号码
act[i].roomNum = j;
//此活动被选择
act[i].flag = true;
//更新此教室的最晚时间
time[j] = act[i].end;
//被选择的活动数目加1
sumAct ++;
}
}
//说明活动没有全部被选择,而所有活动都遍历一遍
//所以需要再加一个教室,从头再遍历
if(sumAct
{
//从头开始遍历
i = 0;
//教室数目加1
sumRoom = sumRoom+1;
}
}
return sumRoom;
}
int _tmain(int argc, _TCHAR* argv[])
{
int cases;
Activity act[N];
//用来记录每个教室目前最晚完成的活动的结束时间
int time[N];
cout<
cin>>cases;
while(cases--)
{
int n;
cout<
cin>>n;
int i;
for(i=0;i
{
time[i+1] = 0; //初始化每个教室目前最晚的时间为0
act[i].number = i+1;
act[i].flag = false; //初始化每个活动都未被选择
act[i].roomNum = 0; //初始化每个活动都占用教室
cout<
cin>>act[i].begin;
cout<
cin>>act[i].end;
}
fast_sort(act,0,n-1);
int roomNum =select_room(act,time,n);
cout<
cout<
for(i=0;i
{
cout<
}
}
system("pause");
return 0;
}
-------------------------------------------------程序测试----------------------------------------------------
请输入案例的个数:
1
请输入活动的数目:
11
活动1开始时间:1
活动1结束时间:4
活动2开始时间:3
活动2结束时间:5
活动3开始时间:0
活动3结束时间:6
活动4开始时间:5
活动4结束时间:7
活动5开始时间:3
活动5结束时间:8
活动6开始时间:5
活动6结束时间:9
活动7开始时间:6
活动7结束时间:10
活动8开始时间:8
活动8结束时间:11
活动9开始时间:8
活动9结束时间:12
活动10开始时间:2
活动10结束时间:13
活动11开始时间:12
活动11结束时间:14
所用教室总数为:5
每个活动在哪一个教室中:
活动1在教室1中
活动2在教室2中
活动3在教室3中
活动4在教室1中
活动5在教室4中
活动6在教室2中
活动7在教室3中
活动8在教室1中
活动9在教室4中
活动10在教室5中
活动11在教室1中
请按任意键继续. . .
图着色问题贪心算法c语言,区间图着色问题(贪心算法)C++实现相关推荐
- 任务分配算法c语言程序,程序员算法基础——贪心算法
原标题:程序员算法基础--贪心算法 前言 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称. 比如一道常见的算法笔试题跳一跳: 有n个盒子排成一行,每个盒子上面有一个数字a[i],表示最 ...
- 妙趣横生的算法(c语言实现),妙趣横生的算法(C++语言实现) 带目录完整pdf[4MB]
<妙趣横生的算法(C++语言实现)>内容丰富,生动有趣,寓教于乐,旨在帮助读者学习数据结构和算法的相关知识,从而开阔眼界,培养编程兴趣,提高编程能力,增强求职的竞争力.如果您想提高自己对算 ...
- 最近最久未使用页面置换算法C语言,LRU页面置换算法模拟-最近最久未使用置换算法...
LRU页面置换算法模拟-最近最久未使用置换算法 LRU页面置换算法模拟-最近最久未使用置换算法|课程设计|计算机数据库课程设计 一.设计目的 1.用C语言实现最近最久未使用(LRU)置换算法. 2.了 ...
- bwt比对算法 C语言,DNA比对算法:BWT
DNA比对算法:BWT BWT算法,实质上是前缀树的一种实现.那么什么是前缀树呢? 一.前缀树 对于问题p in S?如果S=rpq,那么p为S前缀rp的一个后缀. 于是,为了判断p in S 是否成 ...
- c语言程序设计 算法,C语言程序设计第二章算法
<C语言程序设计第二章算法>由会员分享,可在线阅读,更多相关<C语言程序设计第二章算法(38页珍藏版)>请在人人文库网上搜索. 1.C程序设计,主讲人:袁丽,燕大里仁基础教学部 ...
- 数据拟合算法c语言实现,数据拟合算法剖析及C语言实现.doc
数据拟合算法剖析及C语言实现 数据拟合算法剖析及C语言实现 [摘要]数据拟合在很多地方都有应用,主要用来处理实验或观测的原始离散数据.通过拟合可以更好的分析和解释数据.在引用前人的算法基础上,采用正交 ...
- java实现随机数生成算法_Java 语言实现的随机数生成算法
广州疯狂软件学院拥有三大课程体系包括:java课程,android课程,ios课程,疯狂软件年终钜惠,报名java就业班,免费赠送基础班,名额有限,本月火热报名中,欢迎有志之士电话或者QQ咨询. [导 ...
- 加标志量的选择排序算法c语言,置换选择排序算法详解(C语言实现)
上一节介绍了增加 k-路归并排序中的 k 值来提高外部排序效率的方法,而除此之外,还有另外一条路可走,即减少初始归并段的个数,也就是本章第一节中提到的减小 m 的值. m 的求值方法为:m=⌈n/l⌉ ...
- 短进程算法c语言,短进程优先算法C语言实现
短进程优先算法C语言实现 1.本实验实现了短进程优先的进程调度操作,但因为是非抢占式,所以实现起来比较简单. 短进程优先算法是以作业的长短来计算优先级,作业越短,其优先级越高.作业的长短是以作业所要求 ...
最新文章
- iOS逆向(8)-Monkey、Logos
- 方舟服务器如何修改恐龙,方块方舟人物及驯养恐龙属性修改教程 人物属性怎么修改_游侠网...
- Jfinal碰到的问题记录
- 【Chocolatey】查找包
- 二维火:智能餐饮云端互联
- cytoscape操作经验
- HDU计算机网络系统2021复习提纲
- LGP2046[NOI2010]海拔正确性证明
- batch_size,iteration,epoch关系
- CentOS7 配置网络物理机ping不上虚拟机解决方法
- Docker报错:Temporary failure in name resolutionProxy Authentication Required
- CARLA 笔记(01)— 基本架构、核心模块(Traffic Manager、Sensors、ROS bridge、Scenario runner)、高级功能、生态系统
- decimal.JS 快速入门
- MySQL源码调试入门
- d3.js 旋转图形_凭布青云拼布图形设计软件下载-布艺设计软件 v2.0.0.1 官方版
- mysqli_fetch_all() 函数
- 利用Python画出《人民日报》各国疫情图——南丁格尔玫瑰图
- 【论文笔记】视频物体检测(VID)系列 FGFA:Flow-Guided Feature Aggregation for Video Object Detection
- 善用GOOGLE–从入门到精通
- FPGA数码管显示自动计数+按键计数+蜂鸣器
热门文章
- 窗口分析函数_2_生成同值重复排名序号
- 处理字符串_5_字符串里过滤不需要的字符
- Kettle使用_26 根据增删改标识处理数据
- Qt学习笔记之路径问题(window与linux下)
- 跑faster rcnn测试时遇到错误Attribute Error: 'NoneType' object has no attribute 'astype'
- caffe使用过程+digits在windows下的安装和运行
- 你真的了解 Cookie 和 Session 吗?
- MySQL 优化实战记录 1
- jQuery源码分析系列 : 整体架构
- 万国数据联合阿里云发布混合云系列产品 助力企业落地云端