关于单循环赛排对阵图的算法

loveisbug 2004-08-02 04:47:08
正在做这样一个工具,没有好的算法思路。
已知N个队参加比赛,单循环,一共N-1轮,如果N为奇数,每一轮有一队轮空。
如何排出每轮的对阵?
网上找过一个算法,但只适用N为2的n次方值。
请大家帮忙想想。
...全文
1574 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZhangYv 2004-08-09
  • 打赏
  • 举报
回复
先补成2^n的队伍,使用分治算法可以得出解。程序,我曾经写过贴在论坛的某个地方...
loveisbug 2004-08-09
  • 打赏
  • 举报
回复
我看过一个分治算法,但是它只适用2的n次方个参赛队。
gnefuil 2004-08-06
  • 打赏
  • 举报
回复
轮换法
galois_godel 2004-08-05
  • 打赏
  • 举报
回复
其实也比较明显:
对于第i(0<i<n)队,他在第xn轮和第n队比赛,这里xn=2*i%(n-1)唯一决定,在第xj轮和第j队比赛,这里xj=(i+j)%(n-1)也是唯一决定,所以其在n-1轮和各队都比了一次,对于第n队,对任意i(0<i<n),在前n-1轮中都和他比了一次,他显然也和各队分别交手一次。
loveisbug 2004-08-03
  • 打赏
  • 举报
回复
恩,我已经实现了。不过用的是循环嵌套,效率好象还需要优化。
如何证明其理论依据?
galois_godel 2004-08-02
  • 打赏
  • 举报
回复
举个例子,有5个队伍
第1轮 1-5 2-4 3-x
第2轮 1-x 2-5 3-4
第3轮 1-2 3-5 4-x
第4轮 1-3 2-x 4-5
第5轮 1-4 2-3 5-x
x是虚设队,就是碰上表示轮空
galois_godel 2004-08-02
  • 打赏
  • 举报
回复
如果,n是奇数的话,先设一只队伍n+1,每轮和这个虚设的队伍比赛的队伍就是轮

空,所以,我们下面假设n为偶数,
然后,设n个队伍编号分别是1,2,3,...,n,
在第k(1<=k<=n-1)轮,如果1<=i,j<=n-1, i<>j, (i+j-k)%(n-1)=0的,则第i队和

第j队比赛,第n队与由方程(2*x-k)%(n-1)=0决定的队伍x比赛。
可以证明,这样可以得到排法符合单循环规则。

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧