求一个自动分配项目的算法,代码也行。
算法要求:假如有10个老师,每个老师只带规定数量的学生,每个老师提供5个项目,
学生根据自己情况选取项目,在选取时学生最多可选6个,并在每个项目后编号,
1表示最喜欢,2表示喜欢,依次类推。算法根据学生填好的编号顺序分配项目,
但最后每个学生只会被安排一个项目,同时老师所带的学生不能超过规定数量。

解决方案 »

  1.   

    楼上的:
    我说的只是个例子,题目中任何具体的数字都可用未知的x,y,z表示
    我这样说只想把抽象的问题具体一点,如果你很强,每个数字都用未知数代替,
    这也是我想要的算法,做做看吧
      

  2.   

    跟老师关系不大 
    只需要知道 有50个项目(假设每个项目最大人数为表projectPMax[50] ,有projectList[50] )
    假设有n个学生 每个同学有一个 喜爱程度表 n个表 likeList[n]
    每个表取一个元素 加入到最喜欢的projectList[Most]中 就将projectPMax[Most] - 1,将这人去除如果满了 就将加入projectList[more]中后面类似
    这样就好了  算法为尽可能的满足学生
      

  3.   

    哦 这个差不多 就是判断满了 怎么判断
    假设每个老师最多带projectPTea[10]人
    如果 projectPTea[n] == SumPeople(projectList[5n] ... projectList[5n+4])就满了
      

  4.   

    题目的要求是,每个学生只选一个项目,而每个项目只有一个老师提供,也就是说,每个学生只选一个老师跟着。而且没有要求最终所谓的喜欢程度最大,即使有这个意思,也没有具体的要求。
    这个题目的算法是最大流,或者最小费用流。如果不知道概念可以先去baidu一下,不一定知道算法,知道问题是什么就可以了。
    建一个网络,每个学生看做一个点,每个老师看做一个点,如果这个学生喜欢某个老师的某一个项目,就向这个老师的点连一条边,容量是1,权值前面也说了,题目没有规定,如果有规定,就按照要求加一个差不多的权就可以了。然后一个源点,一个汇点,源点向学生连边,容量1,费用0,老师向汇点连边,容量是老师的学生数,费用0。
    这样求出的可行流就是一种答案。
      

  5.   

    我觉得把student和teacher写成类,再新见几个对象,在main函数里匹配
      

  6.   

    需求是:尽量让每个学生都能到自己最喜欢的项目中去
    条件是:每个学生都可以分配一个项目,
    初步分析:可能出现的情况1,没有一个学生喜欢这个项目,情况2,有2个或多个学生喜欢这个项目,情况3,理想的每个项目只有一个学生。在情况2和1,中递归这个关系:一旦当学生选择项目时候,首先列出未被选中的项目作比较,1最喜欢的,2,喜欢的,。。直到这个学生找到适合的项目,然后把这项目删除,这个是学生的关心的。老师和学生的关系是,比较容易,5个学生跟一个老师,
    建议把学生选中的项目一起做成Hashset,
    这个是笨方法,请大家看看是不是分析的对,