c++算法求助,散高分,加月饼,

nwen 2002-09-21 04:53:31
你所在的年级有5个班,每班一支球队在同一块场地上进行单循环赛, 共要进行10场比赛. 如何安排赛程使对各队来说都尽量公平呢. 下面是随便安排的一个赛程: 记5支球队为A, B, C, D, E,在下表左半部分的右上三角的10个空格中, 随手填上1,2,¼10, 就得到一个赛程, 即第1场A对B, 第2场B对C, ¼, 第10场C对E. 为方便起见将这些数字沿对角线对称地填入左下三角.
这个赛程的公平性如何呢, 不妨只看看各队每两场比赛中间得到的休整时间是否均等. 表的右半部分是各队每两场比赛间相隔的场次数, 显然这个赛程对A, E有利, 对D则不公平.
A B C D E 每两场比赛间相隔场次数
A X 1 9 3 6 1, 2, 2
B 1 X 2 5 8 0, 2, 2
C 9 2 X 7 10 4, 1, 0
D 3 5 7 X 4 0, 0, 1
E 6 8 10 4 X 1, 1, 1

从上面的例子出发讨论以下问题:
1) 对于5支球队的比赛, 给出一个各队每两场比赛中间都至少相隔一场的赛程.
2) 当n支球队比赛时, 各队每两场比赛中间相隔的场次数的上限是多少.
thanks!!!!!!!!!!!!!!!!


...全文
36 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
skylit 2002-09-25
  • 打赏
  • 举报
回复
但是有一个判断是否是哈密顿图的充分条件:
任意两个不相邻的顶点u,v,它们的度的和>=顶点数。
观察上面的矩阵,可以发现这个条件是满足的该条件的,所以,在这种情况下一定有解。
feeldead 2002-09-25
  • 打赏
  • 举报
回复
:),我想,上面的都不对吧。
我现在认为这是一个NP完全问题。分析如下(以五个队为例):
五个队之间的比赛有:
AB AC AD AE BC BD BE CD CE DE
AB 1 1 1
AC 1 1 1
AD 1 1 1
AE 1 1 1
BC 1 1 1
BD 1 1 1
BE 1 1 1
CD1 1 1
CE1 1 1
DE1 1 1
其中,填1的地方表示行列所代表的两场比赛可以紧接着进行,比如 (AB,CD)为一,则表示在AB进行比赛后CD可以在下一场进行比赛。容易发现这是一个对称矩阵。
现在把这个矩阵看作是一个无向图G所对应的矩阵(每场比赛表示一个顶点,填一的地方表示这两个顶点之间有一条边),那么原问题则转化为:从图G中任意一点遍历所有的点,而且每一个点只能经过一次。这实际上就是哈密顿路,一个典型的NP完全问题。也及是说,现在还没有它的多项式时间的解法。
griefforme 2002-09-25
  • 打赏
  • 举报
回复
我抢~抢~再抢~还抢~继续抢~~~

●( 楼主~~ ○ ←你
   █┳ 不许动!)┗█┛
┏┓ ┛┗楼主你庆祝时别让我对你动武,快把分交出来~!呵呵~!
feeldead 2002-09-25
  • 打赏
  • 举报
回复
但是有一个判断是否是哈密顿图的充分条件:
任意两个不相邻的顶点u,v,它们的度的和>=顶点数。
观察上面的矩阵,可以发现这个条件是满足的该条件的,所以,在这种情况下一定有解。至于到底怎么才能找到一条哈密顿路,随便找到一本关于图论的课本(离散数学),看他的证明就可以了。
kbsoft 2002-09-25
  • 打赏
  • 举报
回复
偶觉得应该用贪心
skylit 2002-09-25
  • 打赏
  • 举报
回复
我可以提供一种构造仅隔一天的方法,设有abcde,5个队
有下列排列
ab ac ad ae
bc bd be
cd ce
de
注意这个矩阵,去除对角线上的元素,以及ae,可得ac bd ce ad be ,显然是符合条件的,然后再处理对角线以及ae即可,可以证明这样一定会构造出来(证明我就略去了)可得
ab cd ae bc de ac bd ce ad be
feeldead 2002-09-21
  • 打赏
  • 举报
回复
哎呀,不好意思,我上面的补充不正确,待我用程序模拟后再说吧。
liubear 2002-09-21
  • 打赏
  • 举报
回复
题目不容易,还是吃月饼吧
kuailexq2000 2002-09-21
  • 打赏
  • 举报
回复
中秋节快乐!up!
say 2002-09-21
  • 打赏
  • 举报
回复
同庆
kwok_1980 2002-09-21
  • 打赏
  • 举报
回复
是不是赢者树?
feeldead 2002-09-21
  • 打赏
  • 举报
回复
上面的算法说的不是太准确,再补充一下:
每次比赛完后,各个队的s改变后,所有对被分成两类:
1.可以在下一场参加比赛的队和
2.不可以在下一场参加比赛的队。
  因为在参加下一场比赛i后,不论以前的s值是多少,都会变成i+2所以,s的具体值是没有意义的。
  正因为上面的原因,所以只要从可以在下一场参加比赛的队中随便选出两队在下一场比赛即可。要是选不出来(即只有一个队,或者一个队也么有,可以在下一场比赛),则表示无解;要是选出来了,但是到后来的比赛中发现无解,如果现在环两队参加比赛,那是否可以有解呢?不,每次比赛完后,我们完全可以把问题当成初始的情况,这时倒底选那两个对是无关紧要的。
wuyilong20000 2002-09-21
  • 打赏
  • 举报
回复
我去试一下,好像挺难得。
feeldead 2002-09-21
  • 打赏
  • 举报
回复
给每一场比赛附上一个属性 n (该场比赛在十场比赛中的顺序数)。
给每个队附上一个属性 s (所能参加的所有比赛中拥有n的比赛),显然每个对该值的初始值都是1。
假设现在是第i场比赛,是x和y之间的比赛,比赛完后,将x和y队的属性s = i+2。
现在进行比赛,比赛过程中采用贪婪算法,即每次中找出具有最小s值的,需要比赛的两个队进行比赛,如果找到的最小的s值比当前的比赛号还大,则表示无解。
要求最大的间隔数,一个简单的方法就是,将间隔依次设为1..n,看是否有解。
superzjx2000 2002-09-21
  • 打赏
  • 举报
回复
好复杂啊!!!
想想篮球比赛是怎样举行的

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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