区间图着色问题

问题描述:假设要用很多个教室对一组活动进行调度。我们希望使用尽可能少的教室来调度所有活动。请给出一个算法,来确定哪一个活动使用哪一间教室。

这个问题也被称为区间图着色问题,即相容的活动着同色,不相容的着不同颜色,使得所用颜色数最少。

//贪心算法

#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++实现相关推荐

  1. 任务分配算法c语言程序,程序员算法基础——贪心算法

    原标题:程序员算法基础--贪心算法 前言 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称. 比如一道常见的算法笔试题跳一跳: 有n个盒子排成一行,每个盒子上面有一个数字a[i],表示最 ...

  2. 妙趣横生的算法(c语言实现),妙趣横生的算法(C++语言实现) 带目录完整pdf[4MB]

    <妙趣横生的算法(C++语言实现)>内容丰富,生动有趣,寓教于乐,旨在帮助读者学习数据结构和算法的相关知识,从而开阔眼界,培养编程兴趣,提高编程能力,增强求职的竞争力.如果您想提高自己对算 ...

  3. 最近最久未使用页面置换算法C语言,LRU页面置换算法模拟-最近最久未使用置换算法...

    LRU页面置换算法模拟-最近最久未使用置换算法 LRU页面置换算法模拟-最近最久未使用置换算法|课程设计|计算机数据库课程设计 一.设计目的 1.用C语言实现最近最久未使用(LRU)置换算法. 2.了 ...

  4. bwt比对算法 C语言,DNA比对算法:BWT

    DNA比对算法:BWT BWT算法,实质上是前缀树的一种实现.那么什么是前缀树呢? 一.前缀树 对于问题p in S?如果S=rpq,那么p为S前缀rp的一个后缀. 于是,为了判断p in S 是否成 ...

  5. c语言程序设计 算法,C语言程序设计第二章算法

    <C语言程序设计第二章算法>由会员分享,可在线阅读,更多相关<C语言程序设计第二章算法(38页珍藏版)>请在人人文库网上搜索. 1.C程序设计,主讲人:袁丽,燕大里仁基础教学部 ...

  6. 数据拟合算法c语言实现,数据拟合算法剖析及C语言实现.doc

    数据拟合算法剖析及C语言实现 数据拟合算法剖析及C语言实现 [摘要]数据拟合在很多地方都有应用,主要用来处理实验或观测的原始离散数据.通过拟合可以更好的分析和解释数据.在引用前人的算法基础上,采用正交 ...

  7. java实现随机数生成算法_Java 语言实现的随机数生成算法

    广州疯狂软件学院拥有三大课程体系包括:java课程,android课程,ios课程,疯狂软件年终钜惠,报名java就业班,免费赠送基础班,名额有限,本月火热报名中,欢迎有志之士电话或者QQ咨询. [导 ...

  8. 加标志量的选择排序算法c语言,置换选择排序算法详解(C语言实现)

    上一节介绍了增加 k-路归并排序中的 k 值来提高外部排序效率的方法,而除此之外,还有另外一条路可走,即减少初始归并段的个数,也就是本章第一节中提到的减小 m 的值. m 的求值方法为:m=⌈n/l⌉ ...

  9. 短进程算法c语言,短进程优先算法C语言实现

    短进程优先算法C语言实现 1.本实验实现了短进程优先的进程调度操作,但因为是非抢占式,所以实现起来比较简单. 短进程优先算法是以作业的长短来计算优先级,作业越短,其优先级越高.作业的长短是以作业所要求 ...

最新文章

  1. iOS逆向(8)-Monkey、Logos
  2. 方舟服务器如何修改恐龙,方块方舟人物及驯养恐龙属性修改教程 人物属性怎么修改_游侠网...
  3. Jfinal碰到的问题记录
  4. 【Chocolatey】查找包
  5. 二维火:智能餐饮云端互联
  6. cytoscape操作经验
  7. HDU计算机网络系统2021复习提纲
  8. LGP2046[NOI2010]海拔正确性证明
  9. batch_size,iteration,epoch关系
  10. CentOS7 配置网络物理机ping不上虚拟机解决方法
  11. Docker报错:Temporary failure in name resolutionProxy Authentication Required
  12. CARLA 笔记(01)— 基本架构、核心模块(Traffic Manager、Sensors、ROS bridge、Scenario runner)、高级功能、生态系统
  13. decimal.JS 快速入门
  14. MySQL源码调试入门
  15. d3.js 旋转图形_凭布青云拼布图形设计软件下载-布艺设计软件 v2.0.0.1 官方版
  16. mysqli_fetch_all() 函数
  17. 利用Python画出《人民日报》各国疫情图——南丁格尔玫瑰图
  18. 【论文笔记】视频物体检测(VID)系列 FGFA:Flow-Guided Feature Aggregation for Video Object Detection
  19. 善用GOOGLE–从入门到精通
  20. FPGA数码管显示自动计数+按键计数+蜂鸣器

热门文章

  1. 窗口分析函数_2_生成同值重复排名序号
  2. 处理字符串_5_字符串里过滤不需要的字符
  3. Kettle使用_26 根据增删改标识处理数据
  4. Qt学习笔记之路径问题(window与linux下)
  5. 跑faster rcnn测试时遇到错误Attribute Error: 'NoneType' object has no attribute 'astype'
  6. caffe使用过程+digits在windows下的安装和运行
  7. 你真的了解 Cookie 和 Session 吗?
  8. MySQL 优化实战记录 1
  9. jQuery源码分析系列 : 整体架构
  10. 万国数据联合阿里云发布混合云系列产品 助力企业落地云端