十间教室 六门课程
教室支持课程如图所示
要求举例说明
安排甲课程时 可选择 a b c d e五间教室
假如甲课程占用b c d e教室 还剩余a 教室空闲
安排乙课程能选三间教室 首选 f g 教室
但因a 教室空闲 所以自动 把甲课程某一项移入a教室 空出公共的教室以供 乙课程使用
以此类推 后者优先 当没有教室可分配时 提示 无法分配
求算法或思路
技术不限 c# js 等等
<script>
Array.prototype.each = function(fn){
fn = fn || Function.K;
var a = [];
var args = Array.prototype.slice.call(arguments, 1);
for(var i = 0; i < this.length; i++){
var res = fn.apply(this,[this[i],i].concat(args));
if(res != null) a.push(res);
}
return a;
};
/**
* 得到一个数组不重复的元素集合<br/>
* 唯一化一个数组
* @returns {Array} 由不重复元素构成的数组
*/
Array.prototype.uniquelize = function(){
var ra = new Array();
for(var i = 0; i < this.length; i ++){
if(ra.indexOf(this[i])<0){
ra.push(this[i]);
}
}
return ra;
};
Array.intersect = function(a, b){
return a.uniquelize().each(function(o){
return b.indexOf(o)>=0 ? o : null
});
};
Array.minus = function(a, b){
return a.uniquelize().each(function(o){
return b.indexOf(o)>=0 ? null : o
});
};
$availableClassroom = ["A", "B", "C", "D", "E", "F", "G", "H", "J", "K"]
/**
* 教室安排
* @param $dailyArrange 每日安排
* @param $availableClassroom 日常可用教室
* @return array | boolean
*/
function ArrangeClassroom($dailyArrange) {
$result = [];
$courseInit = {
"aCourse"
:
["A", "B", "C", "D", "E"],
"bCourse"
:
["B", "C", "D", "E", "F", "G"],
"cCourse"
:
["H", "J", "K"],
"dCourse"
:
["A", "B", "C"],
"eCourse"
:
["C", "D", "E", "F", "G"],
"fCourse"
:
["H", "J", "K"],
};
for (var $course in $dailyArrange) {
if($courseInit[$course]==undefined)continue;
$intersect = Array.intersect($availableClassroom,$courseInit[$course])
if($intersect){
//从可用教室里面去所需课程数
$used =$intersect.splice(0,$dailyArrange[$course])
//差集删除已用教室
$availableClassroom = Array.minus($availableClassroom, $used);
$result[$course] = $used;
if($used.length==$dailyArrange[$course]){
console.dir("课程"+$course+"分配教室为:"+JSON.stringify($used))
}else{
console.dir("课程"+$course+"分配教室不够")
}
}else{
$result[$course] = [];
}
}
return $result;
}
//周一需要安排哪些课程,一个课程需要安排多少节
$mondayArrange = [];
$mondayArrange["eCourse"]=3;
$mondayArrange["bCourse"]=3;
$mondayArrange["cCourse"]=1;
$mondayArrange["fCourse"]=2;
$mondayArrange["aCourse"]=2;
ArrangeClassroom($mondayArrange)
</script>
PHP: