院校考试部分配学生考试时间(基于贪心算法)
文章背景
院校考试部需要为学生安排考试时间。要求同时选择两门课的学生,不能同时考两门课。
现有课程关系如下图所示
现有学生选课信息如下图所示
现在有学生选课信息和课程关系图,该如何解决呢?
先建立课程关系邻接矩阵,再建立一个·空的课程矩阵。看着学生选课信息,往空课程矩阵里添值,添什么值,就需要看课程关系邻接矩阵。若矩阵里权值为0的边,就不往空矩阵里添,反之添加。
代码实现
建立课程关系邻接矩阵
可参考▶基于邻接矩阵表示课程关系(Java)
空矩阵添权值逻辑
public AMatrix IdentifyNodeInMatrix(int[] arr, AMatrix AMatrix) {AMatrix temp = new AMatrix(7);String[] labels = {"CSCI203", "CSCI204", "CSCI205", "CSCI212", "CSCI213", "CSCI222", "CSCI235"};for (String label : labels) {temp.insertVertex(label);//插入结点}for (int i = 0; i < arr.length; i++) {for (int j = 0; j < labels.length; j++) {// System.out.println(arr[i]+""+ arr[j]);
// System.out.println(AMatrix.getWeight(arr[i], arr[j]));//权值不为0if (AMatrix.getWeight(arr[i], j) != 0 || AMatrix.getWeight(j, arr[i]) != 0) {// System.out.println("有权值"+arr[i]+""+ j);temp.insertEdge(arr[i], j, 1);temp.insertEdge(j, arr[i], 1);}//权值为0if (AMatrix.getWeight(arr[i], j) == 0 || AMatrix.getWeight(j, arr[i]) == 0) {// System.out.println("无权值"+arr[i]+""+ j);temp.insertEdge(arr[i], j, 0);temp.insertEdge(j, arr[i], 0);}}}return temp;}public int[][] newArrayOfNonNodes(int[][] array, int[][] array1) {for (int i = 0; i < array.length; i++) {for (int j = 0; j < array.length; j++) {if (i == j) {array[i][j] = 1;array[j][i] = 1;}if ((array[i][j] == 0 && array1[i][j] == 0) | (array[j][i] == 0 && array1[j][i] == 0)) {array[i][j] = 0;array[j][i] = 0;} else {array[i][j] = 1;array[j][i] = 1;}}}return array;}
计数权值为0边
public int[][] newArrayOfNonNodes1(int[][] array, int[][] array1, int[][] array2) {for (int i = 0; i < array.length; i++) {for (int j = 0; j < array.length; j++) {if (i == j) {array[i][j] = 1;array[j][i] = 1;}if ((array[i][j] == 0 && array1[i][j] == 0 && array2[i][j] == 0) | (array[j][i] == 0 && array1[j][i] == 0 && array2[i][j] == 0)) {array[i][j] = 0;array[j][i] = 0;} else {array[i][j] = 1;array[j][i] = 1;}}}return array;}
课程信息排序
private static List<Map.Entry<String, Integer>> mapValueSort(HashMap<String, Integer> labelsMap) {List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(labelsMap.entrySet());list.sort(new Comparator<Map.Entry<String, Integer>>() {public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {return o1.getValue() < o2.getValue() ? 1 : ((o1.getValue() == o2.getValue()) ? 0 : -1);}});return list;}
主函数
public static void main(String[] args) {//txt数据int total = 5;String[] Belinda = {"CSCI212", "CSCI235", "CSCI222", "CSCI203"};int[] Belinda1 = {3, 6, 5, 0};String[] Calvin = {"CSCI205", "CSCI204", "CSCI222"};int[] Calvin1 = {2, 1, 5};String[] Johnathan = {"CSCI212", "CSCI222", "CSCI204", "CSCI203"};int[] Johnathan1 = {3, 5, 1, 0};String[] Brandon = {"CSCI212", "CSCI203", "CSCI235", "CSCI213"};int[] Brandon1 = {3, 0, 6, 4};int[][] totalarray = new int[7][7];mainFuction mainFuction = new mainFuction();AMatrix aMatrix = mainFuction.createAMatrix();AMatrix aMatrix1 = mainFuction.IdentifyNodeInMatrix(Belinda1, aMatrix);int[][] Belinda1edges = aMatrix1.getedgescollection();AMatrix aMatrix2 = mainFuction.IdentifyNodeInMatrix(Calvin1, aMatrix);int[][] Calvin1edges = aMatrix2.getedgescollection();AMatrix aMatrix3 = mainFuction.IdentifyNodeInMatrix(Johnathan1, aMatrix);int[][] Johnathan1edges = aMatrix3.getedgescollection();AMatrix aMatrix4 = mainFuction.IdentifyNodeInMatrix(Brandon1, aMatrix);int[][] Brandon1edges = aMatrix4.getedgescollection();int[][] num1 = mainFuction.newArrayOfNonNodes(totalarray, Belinda1edges);int[][] num2 = mainFuction.newArrayOfNonNodes1(totalarray, num1, Brandon1edges);int[][] num3 = mainFuction.newArrayOfNonNodes1(totalarray, num2, Calvin1edges);int[][] num4 = mainFuction.newArrayOfNonNodes1(totalarray, num3, Johnathan1edges);String[] labels = {"CSCI203", "CSCI204", "CSCI205", "CSCI212", "CSCI213", "CSCI222", "CSCI235"};int[] arrcount0 = new int[7];for (int i = 0; i < num4.length; i++) {for (int j = 0; j < num4.length; j++) {if (num4[i][j] == 0) {arrcount0[i] += 1;}}}HashMap<String, Integer> hashMap = new HashMap<String, Integer>();for (int i = 0; i < arrcount0.length; i++) {hashMap.put(labels[i], arrcount0[i]);}List<Map.Entry<String, Integer>> list = mapValueSort(hashMap);System.out.println("Slot 1:" + "," + list.get(0).getKey() + "," + list.get(1).getKey() + " " + "3");if (aMatrix.getWeight(1, 6) != 0) {System.out.println("Slot 2:" + "," + list.get(3).getKey() + "," + list.get(6).getKey() + " " + "3");}if (aMatrix.getWeight(4, 2) != 0) {System.out.println("Slot 3:" + "," + list.get(4).getKey() + "," + list.get(5).getKey() + " " + "3");}System.out.println("Slot 4:" + "," + list.get(2).getKey() + " " + "3");
}
}
院校考试部分配学生考试时间(基于贪心算法)相关推荐
- 算法经典“钓鱼”问题详解 基于贪心算法 C语言描述
算法经典"钓鱼"问题详解 基于贪心算法 初始条件 在一条水平路边,有 n 2 ≤ n ≤ 25个钓鱼池,从左到右编号为1.2.3.--.n.小明有H1 ≤ H ≤ 16个小时的空余 ...
- rgv动态调度MATLAB代码,基于贪心算法的智能RGV的动态调度策略
李胜成 摘 要:一种智能加工系统由8台计算机数控机床(CNC).1辆轨道式自动引导车(RGV).1条RGV直线轨道.1条上料传送带.1条下料传送带等附属设备组成.文章通过研究RGV的选择判断规律,以 ...
- c语言装箱问题思路,C语言基于贪心算法解决装箱问题的方法
本文实例讲述了C语言基于贪心算法解决装箱问题的方法.分享给大家供大家参考,具体如下: 问题描述: 有一些箱子,容量为V,同时有n个物品,每个物品有一个体积(小于等于箱子容量),要求将物品全部装入箱子中 ...
- 背包问题 贪心算法 java_JS基于贪心算法解决背包问题
前面我们分享了关于js使用贪心算法解决找零问题,本文我们接着为大家介绍JS基于贪心算法解决背包问题. 贪心算法:在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做 ...
- 转载︱案例 基于贪心算法的特征选择
本文转载于R语言中文社区,详情链接 相关帖子 转载︱案例 基于贪心算法的特征选择 用GA算法设计22个地点之间最短旅程-R语言实现 ---------------------------------- ...
- 装箱问题c语言函数,C语言基于贪心算法解决装箱问题的方法
本文实例讲述了C语言基于贪心算法解决装箱问题的方法.分享给大家供大家参考,具体如下: 问题描述: 有一些箱子,容量为V,同时有n个物品,每个物品有一个体积(小于等于箱子容量),要求将物品全部装入箱子中 ...
- 基于贪心算法的马踏棋盘哈密顿回路问题
基于贪心算法的马踏棋盘哈密顿回路问题 Github 链接 问题分析 马踏棋盘其实相当于一个解空间的搜索问题,而遍历到每一个节点并要求最后可以回到起点本质上是一个哈密顿回路问题 目前大部分马踏棋盘的相关 ...
- 背包问题 贪心算法 java_JS基于贪心算法解决背包问题示例
本文实例讲述了JS基于贪心算法解决背包问题.分享给大家供大家参考,具体如下: 贪心算法:在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局 ...
- 学霸计算机考试新闻,陪学生考试老师意外考上哈佛 堪称学霸中的战斗机
导读:[陪学生考试老师意外考上哈佛 堪称学霸中的战斗机]"感觉很神奇,我们的老师考上了哈佛!"杨老师被哈佛大学录取的消息在学校不胫而走,还上了喜报,学生和家长都觉得意外又惊奇.重庆 ...
最新文章
- CTF---Web入门第四题 Forms
- 最新最全国内外架构开源技术干货资料
- 数学:拓展中国剩余定理
- 【网络编程】——connect函数遇见EINTR的处理
- SAP S4HANA使用ABAP获得生产订单的状态
- php mysql电商网站设计与制作_赢在电子商务——php+mysql电商网站设计与制作
- python 邮箱验证_Python-发送邮件验证码
- Linux内存管理:ELF文件格式
- 剑指_4二维数组的查找(Python)
- HTML兼容IE版本问题
- matlab2008 软件下载及安装教程
- java 类的加载机制详解
- excel计算机一级打不开,excel打不开的原因及解决方法
- SQL查询前几条数据的方法
- C语言程序设计——计算图形面积(圆形,矩形,三角形,梯形)
- 开机要按F1的解决方法
- C#和JQ判断移动端还是PC端
- 附件上传的插件介绍--- plupload
- 创建一个非循环单链表并对其进行操作
- MyBatis框架学习笔记(1)——B站动力节点