最近小弟遇到一个有趣的问题
数据:N位裁判,A个赛场,每个赛场有B场比赛,比赛共进行C天,每天上午下午各有一场比赛.
条件:1.一场比赛有两位不同的裁判 
     2.每位裁判不能超过一个参赛的最大值D,D=(A*B*2)/N
     3.同一上午或下午,一个裁判只能参加一场比赛
要求:排出一张裁判参赛的日程表(表中包括参赛日期,上午下午,参赛赛场,每个赛场有那两位裁判)
小弟用递归函数基本上完成了上述题目的要求,但要是数据取值过大就会发生堆栈溢出,不知各位大
侠有没有什么更好办法,是不是一定要用数据结构方面的知识?请大家多多指教!

解决方案 »

  1.   

    我是用深度搜索来实现的,如果C太大就会很慢,还在想改进的办法
    到时再给出代码吧还有一个投机取巧的方法,因为每个上下午就只有一场比赛
    那么我每次取两名裁判出来,用满他的参赛场数之后(一天就两次)
    再选两位裁判出来做同样的操作
    不过这种方法会出现有裁判没有参加比赛的情况,但是题目中没有要求喔。
    嘻嘻~~~~
      

  2.   

    鲨鱼兄,谢谢你供的思路。我是用VB编的,我也是先一次取两个裁判,再取两个裁判与之比较,如
    果第二次取的裁判中有一人是第一次取的两人中的一人就重取,所以我的递归常会溢出。
    我回去试试用深度搜索。
    不好意思,还少了一个条件:不是每一个裁判都必须上场。
      

  3.   

    鲨鱼兄,你能贴出你C语言的原码吗?我在VB中实现了深度优先算法,但对于这个问题我不知道如何建模?