教室排课

来源:互联网 发布:linux查看tomcat进程 编辑:程序博客网 时间:2024/04/29 15:04
/**问题描述 信息学院有四个专业A、B、C、D,各专业入学新生人数分别是Na, Nb, Nc,Nd人。新学期开始有一门公共课,按专业划分成四个教学班, 四个班在某个相同的时间段上课。已知该时间段还剩余8间教室可用,编号从1到8,每个教室能容纳的人数分别为120,40,85,50,100,140,70,100。 试编一个程序,为上述四个教学班分配教室。 找出所有可行的分配方案,对于每个方案依次输出为专业A、B、C、D分配的教室编号,按照字典顺序输出所有方案。 输入格式 一行,包含4个整数Na, Nb, Nc,Nd (20≤Na, Nb, Nc,Nd≤120),每2个整数之间用一个空格隔开。 输出格式 如果存在分配方案,输出若干行,每行表示一种教室分配方案,包含4个整数,依次表示A、B、C、D四个专业分配的教室编号。 注意:按照字典序输出所有方案。 如果不存在分配方案,输出-1。 样例输入 109 87 120 81 样例输出 1 5 6 3 1 5 6 8 1 8 6 3 1 8 6 5 6 5 1 3 6 5 1 8 6 8 1 3 6 8 1 5 样例输入 100 101 102 103 样例输出 -1*/import java.util.*;public class Main5 {public static int a, b, c, d, sum = 0;public static int[] classRoom = { 120, 40, 85, 50, 100, 140, 70, 100 },array = new int[4];public static int[] tmp = new int[4];public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);for (int i = 0; i < 4; i++) {array[i] = sc.nextInt();}search(tmp, 0);if (sum == 0) {System.out.println(-1);}}// 全排序,递归public static void search(int[] tmps, int cur) {if (cur == 4) {// 满足条件就输出for (int i = 0; i < tmps.length; i++) {System.out.print(tmps[i] + 1 + " ");}sum++;System.out.println();} else {// 添加下一课室for (int i = 0; i < 8; i++) {boolean flag = false;for (int j = 0; j < cur; j++) { // 判断该课室是否已经被安排if (tmps[j] == i) {flag = true;break;}}if (!flag && array[cur] <= classRoom[i]) { // 假如该课室既没有被安排,也满足条件,则安排该课室tmps[cur] = i;search(tmps, cur + 1);}}}}}

0 0
原创粉丝点击