免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: nickoal
打印 上一主题 下一主题

[算法] 赛程安排的算法 [复制链接]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
31 [报告]
发表于 2005-05-11 10:58 |只看该作者

赛程安排的算法

你这个是双循环的,也就是即有A->;B,又有B->;A的
5支队就需要5*4/(5/2)=10轮

论坛徽章:
0
32 [报告]
发表于 2005-05-11 11:18 |只看该作者

赛程安排的算法

原帖由 "yuxh" 发表:
你这个是双循环的,也就是即有A->;B,又有B->;A的
5支队就需要5*4/(5/2)=10轮

to yuxh:
汗,没有仔细看,是的。对奇数是错的。还有,yuxh,你能不能写一个双循环的代码,因为我觉得要排出双循环才算真正解决了这个问题。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
33 [报告]
发表于 2005-05-11 11:29 |只看该作者

赛程安排的算法

我这个算法是有问题的,只能在28(含)以内可以,30以上就不行了
而且还没有解决奇数问题
双循环只要把单循环重复一遍就可以了(形如A->;B变成B->;A)
所以只要把单循环搞明白了,双循环就不是问题了

论坛徽章:
0
34 [报告]
发表于 2005-05-16 16:57 |只看该作者

赛程安排的算法

忙完了回来,发现这个贴子觉了,顶一下,不算灌水,我在想办法

论坛徽章:
0
35 [报告]
发表于 2005-05-16 17:05 |只看该作者

赛程安排的算法

[quote]原帖由 "cellar"]忙完了回来,发现这个贴子觉了,顶一下,不算灌水,我在想办法[/quote 发表:

加油吧
我现在最好的一种只能实现2-7个队的排列   
yuxh得可以实现2-28个偶数队

论坛徽章:
0
36 [报告]
发表于 2005-05-16 17:28 |只看该作者

赛程安排的算法

那个我给大家一个建议,不要搞双循环的,只搞单循环的,双循环的太分散注意力,单循环出来,reverse一下就ok了

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
37 [报告]
发表于 2005-05-16 19:21 |只看该作者

赛程安排的算法

错了。。。

论坛徽章:
0
38 [报告]
发表于 2005-05-18 13:43 |只看该作者

赛程安排的算法

经过N天的讨论,算法终于找出来了,其实简单的可怕:
你上眼

  1. /*termplay.c
  2. *programm by ETSG(BIRDIC,CELLAR),2000-2005
  3. *N队单循环赛赛程安排的程序
  4. *注:程序是将各队排号,使用时可将其用实际队名替换,
  5. *如队数为奇数,则与不存在的队比赛的队轮空
  6. *感谢远在加拿大的组员BIRDIC提供算法
  7. */
  8. #include <stdio.h>;
  9. #include <stdlib.h>;
  10. int main(int argc, char *argv[])
  11. {
  12. int i,j,tmp,k,arrsiz;
  13. if(argc!=2){
  14.     printf("uses:%s num",argv[0]);
  15.     exit(1);
  16. }   
  17. arrsiz=atoi(argv[1]);
  18. arrsiz=arrsiz%2?arrsiz+1:arrsiz;
  19. int *arr=malloc(sizeof(int)*arrsiz);
  20. for(i=0;i<arrsiz;i++)
  21.     arr[i]=i;
  22. for(i=1;i<arrsiz;i++){
  23.     printf("------------BEGIN OF ROUND %d------------\n",i);
  24.     tmp=arr[arrsiz-1];
  25.     for(j=arrsiz-1;j>;1;j--)
  26.         arr[j]=arr[j-1];
  27.     arr[1]=tmp;
  28.     for(k=0;k<arrsiz/2;k++)
  29.         printf("%d vs %d\t",arr[k],arr[arrsiz-1-k]);
  30.    printf("\n------------END OF ROUND %d------------\n",i);  
  31. }
  32. free(arr);
  33. return 0;
  34. }
复制代码

论坛徽章:
0
39 [报告]
发表于 2005-05-18 14:33 |只看该作者

赛程安排的算法

终于明白了,多谢cellar提供的代码

论坛徽章:
0
40 [报告]
发表于 2005-05-20 13:47 |只看该作者

赛程安排的算法

如果采用递归,代码是不是可以简化些,过些天将给出具体代码.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP