编程之美-高效率的安排见面会
2016-08-24 23:25
183 查看
问题:有n个人会参加m个会议,其中一个人会参加m个会议中的若干个。怎样安排m个会议的日程使效率最高。
思路:书中的想法是将它转换为一个图的问题
例如:有5个人A,B,C,D,E 会参加5个会议 1,2,3,4,5,参加会议的情况如下。
A : { 1 - 2 - 3 } B : { 1 - 3 - 4 } C : { 2 - 3 } D : { 3 - 4 - 5 } E : { 1 - 4 - 5 }
A参加会议 1,2,3,隐含着1,2,3通过A已经关联在一起了
这样由上面 ABCDE和12345的关系可以得到一张图
由于题目要求会议的安排不能冲突,这样它就变成了图的着色问题,图中有关联的点颜色不能一样
算法描述:
color
存储n个顶点的着色方案,可以选择的颜色为1到m
t=1
对当前第t个顶点开始着色:
若t>n 则已求得一个解,输出着色方案即可
否则,依次对顶点t着色1-m,
若t与所有其它相邻顶点无颜色冲突,则继续为下一顶点着色;否则,回溯,测试下一颜色。
(将原作者的c语言改版成了java语言版)原文链接:http://blog.csdn.net/wangzhiyu1980/article/details/50598346
第1个点染色为R 第2个点染色为G 第3个点染色为B 第4个点染色为G 第5个点染色为Y
思路:书中的想法是将它转换为一个图的问题
例如:有5个人A,B,C,D,E 会参加5个会议 1,2,3,4,5,参加会议的情况如下。
A : { 1 - 2 - 3 } B : { 1 - 3 - 4 } C : { 2 - 3 } D : { 3 - 4 - 5 } E : { 1 - 4 - 5 }
A参加会议 1,2,3,隐含着1,2,3通过A已经关联在一起了
这样由上面 ABCDE和12345的关系可以得到一张图
由于题目要求会议的安排不能冲突,这样它就变成了图的着色问题,图中有关联的点颜色不能一样
算法描述:
color
存储n个顶点的着色方案,可以选择的颜色为1到m
t=1
对当前第t个顶点开始着色:
若t>n 则已求得一个解,输出着色方案即可
否则,依次对顶点t着色1-m,
若t与所有其它相邻顶点无颜色冲突,则继续为下一顶点着色;否则,回溯,测试下一颜色。
(将原作者的c语言改版成了java语言版)原文链接:http://blog.csdn.net/wangzhiyu1980/article/details/50598346
public class ZhuoSe { private static final int MEETING =5; private static final int MAX_COLOR= 6; private static final char colors[] = {'N', 'R', 'G', 'B', 'Y', 'W'}; private static final int meetings[][] ={ {0,1,1,1,1}, {1,0,1,0,0}, {1,1,0,1,1}, {1,0,1,0,1}, {1,0,1,1,0}, }; private static final int result[] = {0,0,0,0,0}; public static void main(String[] args) { compute(); for (int i = 0; i < MEETING; i++) { int k=i+1; System.out.print("第"+k+"个点染色为"+colors[result[i]]+" "); } } public static boolean check(int meeting, int color) { for (int i = 0; i < MEETING; i++) { if ((meetings[i][meeting] != 0) && (color == result[i])) { return false; } } return true; } public static void compute() { for (int i = 0; i < MEETING; i++) { if (result[i] == 0) { for (int j = 1; j < MAX_COLOR; j++) { if (!check(i, j)) { continue; } else { result[i] = j; break; } } } } } }结果如下:
第1个点染色为R 第2个点染色为G 第3个点染色为B 第4个点染色为G 第5个点染色为Y
相关文章推荐
- 《编程之美》1.9:高效率的安排见面会的一个解法
- 编程之美-高效率安排见面会的方法整理
- 编程之美:第一章 1.9高效率地安排见面会
- 《编程之美》1.9:高效率的安排见面会的一个解法
- 编程之美:高效率地安排见面会
- 《编程之美》读书笔记05: 1.9 高效率的安排见面会
- 编程之美:1.9高效率安排见面会 图的m着色问题 回溯法
- 编程之美1.9——高效率地安排见面会
- flyinghearts《编程之美》读书笔记连载(6)-高效率安排见面会
- 编程之美读书笔记_1.9 高效率的安排见面会
- 读书笔记之编程之美 - 1.9 高效率地安排见面会
- 高效率地安排见面会
- 编程之美-----高效率地安排见面会
- 编程之美----高效率地安排见面会----贪心策略
- 1.9 高效率的安排见面会
- 【编程之美】高效率的安排见面会
- 编程之美--1.9高效率的安排见面会(解法二python)
- 【编程之美】高效率的安排见面会
- 编程之美 set 15 高效率地安排见面会
- 编程之美读书笔记之-高效率的安排见面会