文章背景

院校考试部需要为学生安排考试时间。要求同时选择两门课的学生,不能同时考两门课。
        现有课程关系如下图所示

​        现有学生选课信息如下图所示

​ 现在有学生选课信息和课程关系图,该如何解决呢?

​ 先建立课程关系邻接矩阵,再建立一个·空的课程矩阵。看着学生选课信息,往空课程矩阵里添值,添什么值,就需要看课程关系邻接矩阵。若矩阵里权值为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");
}
}

院校考试部分配学生考试时间(基于贪心算法)相关推荐

  1. 算法经典“钓鱼”问题详解 基于贪心算法 C语言描述

    算法经典"钓鱼"问题详解 基于贪心算法 初始条件 在一条水平路边,有 n 2 ≤ n ≤ 25个钓鱼池,从左到右编号为1.2.3.--.n.小明有H1 ≤ H ≤ 16个小时的空余 ...

  2. rgv动态调度MATLAB代码,基于贪心算法的智能RGV的动态调度策略

    李胜成 摘  要:一种智能加工系统由8台计算机数控机床(CNC).1辆轨道式自动引导车(RGV).1条RGV直线轨道.1条上料传送带.1条下料传送带等附属设备组成.文章通过研究RGV的选择判断规律,以 ...

  3. c语言装箱问题思路,C语言基于贪心算法解决装箱问题的方法

    本文实例讲述了C语言基于贪心算法解决装箱问题的方法.分享给大家供大家参考,具体如下: 问题描述: 有一些箱子,容量为V,同时有n个物品,每个物品有一个体积(小于等于箱子容量),要求将物品全部装入箱子中 ...

  4. 背包问题 贪心算法 java_JS基于贪心算法解决背包问题

    前面我们分享了关于js使用贪心算法解决找零问题,本文我们接着为大家介绍JS基于贪心算法解决背包问题. 贪心算法:在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做 ...

  5. 转载︱案例 基于贪心算法的特征选择

    本文转载于R语言中文社区,详情链接 相关帖子 转载︱案例 基于贪心算法的特征选择 用GA算法设计22个地点之间最短旅程-R语言实现 ---------------------------------- ...

  6. 装箱问题c语言函数,C语言基于贪心算法解决装箱问题的方法

    本文实例讲述了C语言基于贪心算法解决装箱问题的方法.分享给大家供大家参考,具体如下: 问题描述: 有一些箱子,容量为V,同时有n个物品,每个物品有一个体积(小于等于箱子容量),要求将物品全部装入箱子中 ...

  7. 基于贪心算法的马踏棋盘哈密顿回路问题

    基于贪心算法的马踏棋盘哈密顿回路问题 Github 链接 问题分析 马踏棋盘其实相当于一个解空间的搜索问题,而遍历到每一个节点并要求最后可以回到起点本质上是一个哈密顿回路问题 目前大部分马踏棋盘的相关 ...

  8. 背包问题 贪心算法 java_JS基于贪心算法解决背包问题示例

    本文实例讲述了JS基于贪心算法解决背包问题.分享给大家供大家参考,具体如下: 贪心算法:在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局 ...

  9. 学霸计算机考试新闻,陪学生考试老师意外考上哈佛 堪称学霸中的战斗机

    导读:[陪学生考试老师意外考上哈佛 堪称学霸中的战斗机]"感觉很神奇,我们的老师考上了哈佛!"杨老师被哈佛大学录取的消息在学校不胫而走,还上了喜报,学生和家长都觉得意外又惊奇.重庆 ...

最新文章

  1. CTF---Web入门第四题 Forms
  2. 最新最全国内外架构开源技术干货资料
  3. 数学:拓展中国剩余定理
  4. 【网络编程】——connect函数遇见EINTR的处理
  5. SAP S4HANA使用ABAP获得生产订单的状态
  6. php mysql电商网站设计与制作_赢在电子商务——php+mysql电商网站设计与制作
  7. python 邮箱验证_Python-发送邮件验证码
  8. Linux内存管理:ELF文件格式
  9. 剑指_4二维数组的查找(Python)
  10. HTML兼容IE版本问题
  11. matlab2008 软件下载及安装教程
  12. java 类的加载机制详解
  13. excel计算机一级打不开,excel打不开的原因及解决方法
  14. SQL查询前几条数据的方法
  15. C语言程序设计——计算图形面积(圆形,矩形,三角形,梯形)
  16. 开机要按F1的解决方法
  17. C#和JQ判断移动端还是PC端
  18. 附件上传的插件介绍--- plupload
  19. 创建一个非循环单链表并对其进行操作
  20. MyBatis框架学习笔记(1)——B站动力节点

热门文章

  1. 把青春的绿色铺满校园1
  2. python连接数据库设置编码格式_Python连接mssql数据库编码问题解决方法
  3. 移动端怎么实现复制粘贴?
  4. OFDM 十六讲 4 -What is a Cyclic Prefix in OFDM
  5. Java后端_Properties集合的遍历
  6. 16年老股民,转入外汇市场,炒外汇为什么要用EA?
  7. 硬盘电路板损坏故障数据如何修复?
  8. Golang 031. 《孙子算经》之鸡兔同笼
  9. vue3生命周期图示
  10. wangEditor 修改 “视频”菜单,上传视频(替换原来的输入地址),三次修改