分治算法
本帖最后由 蜘蛛抱蛋 于 2010-11-26 11:25 编辑问题是:某次球赛为循环制,n位选手参赛,赛程n-1天,每位选手都必须与其他每位选手比赛一次,最后按积分排名选出优胜者。要求每人每天都要赛一场。用程序计算出日程安排。为了简化过程,参赛选手数量为2的N次方
要用到算法里的 分治算法 大家可以试一试~
**** Hidden Message ***** 分治是最基础的算法?~ 我看着怎么这么难啊。 - -||| 没认真读书头一次听说分治算法 12
13 28
14 23 37
15 24 38 46
16 25 34 47
17 26 35 48
18 27 36 45 手机上,不方便写代码.没听过分治 本帖最后由 3mile 于 2010-11-26 00:15 编辑
分治算法?受教了。
用笨方法解决的。不知道正确与否?
**** Hidden Message ***** 孤陋寡闻了, 没用过最基础的分治算法 本帖最后由 蜘蛛抱蛋 于 2010-11-26 11:49 编辑
回复 7# gapkiller
说错话了,我是看书上这么介绍的。。。
回复 6# 3mile
你可能误解了,每人每天只能比赛一场 看看 不明白分治算法 本帖最后由 3mile 于 2010-11-26 13:58 编辑
回复 8# 蜘蛛抱蛋
我误解了吗?也许吧。
结果的每一横行为一天的比赛安排。
还是把天数安排加上吧。
#include <array.au3>
Local $a = 0, $temp = 2, $array
Local $input = InputBox('输入', '请输入选手人数', '8')
For $i = 1 To $input
For $n = $temp To $input
ReDim $array[$a + 2]
$array[$a] = '选手' & $i
$array[$a] = '选手' & $n
$a += 1
Next
$temp += 1
Next
_ArrayDelete($array, UBound($array))
$a = 0
$temp = ''
$array1 = $array
Local $fin, $go
For $n = 0 To $input - 1 - 1
$temp &= "第" & $n + 1 & "天" & @TAB
$temp &= $array1[$n] & '对' & $array1[$n] & '|'
For $i = 0 To UBound($array) - 1
If Not StringInStr($temp, $array[$i]) And Not StringInStr($temp, $array[$i]) Then
$temp &= $array[$i] & '对' & $array[$i] & '|'
$go &= $i & '|'
EndIf
Next
$del = StringSplit(StringTrimRight($go, 1), '|')
For $y = $del To 1 Step -1
_ArrayDelete($array, $del[$y])
Next
$go = ''
$fin &= $temp & @CRLF
$temp = ''
Next
MsgBox(0, 0, $fin)
回复 10# 3mile
哦,是我没仔细看,用循环也可以,这个例子只不过为了说明这个算法 好递归...
字数补丁..
页:
[1]