循环调度程序填写 "byes"
Round Robin Scheduler Filling in "byes"
我正在使用循环法来安排比赛。我希望每支球队都打 "n" 场比赛,而我有 "x" 支球队。如果 "x" 是偶数,一切都很好,但如果 "x" 是奇数,我必须添加另一个团队,"bye" 才能让它工作。
当我有 11 支球队,每支球队打 4 场比赛时,轮空的结果是有 4 支球队轮空。这是低效的,因为他们可以互相比赛,这样每队就可以打 4 场比赛。
在安排了所有比赛,包括一支球队 "bye" 的比赛后,我试图让所有有过 "bye week" 的球队都打一场比赛。我需要确保球队之前没有参加过比赛。
由于我使用的团队数量较少,所以我只是使用随机发生器来尝试组合,直到有一个可行为止。但是,我无法让它工作。
这是我的代码,用于安排轮次比赛的球队。我想仔细检查一下他们以前是否玩过,如果玩过,请随机化列表,以便我们可以尝试不同的组合。我不认为检查团队到目前为止是否发挥作用,因为即使他们有重叠,它也不会洗牌。
while (true){
$needshuffled = "no";
for ($j=0; $j < $maxgames/2; $j++){
$k = $j*2;
$round[$maxgames][$j]["Home"]=$byeteams[$k];
$round[$maxgames][$j]["Away"]=$byeteams[$k+1];
$home = $round[$maxgames][$j]["Home"];
$away = $round[$maxgames][$j]["Away"];
$sql = "SELECT * FROM `temp`
WHERE (Home = '$home' and Away = '$away')
or (Home = '$away' and Away = '$home')";
if ($conn->query($sql) === TRUE) {
if ($result=mysqli_query($conn,$sql))
{
// Return the number of rows in result set
$rowcount=mysqli_num_rows($result);
if ($rowcount > 0)
{
$needshuffled = "yes";
}
}
}
}
if ($needshuffled == "no"){
break;
}
}
如果将 if ($conn->query($sql) === TRUE)
用于 select
语句,则不正确,请参阅 documentation:
Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.
既然你已经做了两次,你可以完全删除这一行并使用
$sql = "SELECT * FROM `temp`
WHERE (Home = '$home' and Away = '$away')
or (Home = '$away' and Away = '$home')";
if ($result=mysqli_query($conn,$sql)) {
...
或者,由于您已经在变量 $round
中有了完整的时间表,您可以使用它来检查现有的匹配项。
您可以尝试不同的策略:
对于球队数量为奇数且天数为偶数的循环赛,未来恰好有一天,已经轮空的球队子集将与轮空的球队进行比赛已经,并且所有尚未轮空的球队要么在当天轮空,要么与尚未轮空的球队比赛。
您需要做的就是不断生成循环table,直到找到这一天并使用当天的比赛。
我正在使用循环法来安排比赛。我希望每支球队都打 "n" 场比赛,而我有 "x" 支球队。如果 "x" 是偶数,一切都很好,但如果 "x" 是奇数,我必须添加另一个团队,"bye" 才能让它工作。
当我有 11 支球队,每支球队打 4 场比赛时,轮空的结果是有 4 支球队轮空。这是低效的,因为他们可以互相比赛,这样每队就可以打 4 场比赛。
在安排了所有比赛,包括一支球队 "bye" 的比赛后,我试图让所有有过 "bye week" 的球队都打一场比赛。我需要确保球队之前没有参加过比赛。
由于我使用的团队数量较少,所以我只是使用随机发生器来尝试组合,直到有一个可行为止。但是,我无法让它工作。
这是我的代码,用于安排轮次比赛的球队。我想仔细检查一下他们以前是否玩过,如果玩过,请随机化列表,以便我们可以尝试不同的组合。我不认为检查团队到目前为止是否发挥作用,因为即使他们有重叠,它也不会洗牌。
while (true){
$needshuffled = "no";
for ($j=0; $j < $maxgames/2; $j++){
$k = $j*2;
$round[$maxgames][$j]["Home"]=$byeteams[$k];
$round[$maxgames][$j]["Away"]=$byeteams[$k+1];
$home = $round[$maxgames][$j]["Home"];
$away = $round[$maxgames][$j]["Away"];
$sql = "SELECT * FROM `temp`
WHERE (Home = '$home' and Away = '$away')
or (Home = '$away' and Away = '$home')";
if ($conn->query($sql) === TRUE) {
if ($result=mysqli_query($conn,$sql))
{
// Return the number of rows in result set
$rowcount=mysqli_num_rows($result);
if ($rowcount > 0)
{
$needshuffled = "yes";
}
}
}
}
if ($needshuffled == "no"){
break;
}
}
if ($conn->query($sql) === TRUE)
用于 select
语句,则不正确,请参阅 documentation:
Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.
既然你已经做了两次,你可以完全删除这一行并使用
$sql = "SELECT * FROM `temp`
WHERE (Home = '$home' and Away = '$away')
or (Home = '$away' and Away = '$home')";
if ($result=mysqli_query($conn,$sql)) {
...
或者,由于您已经在变量 $round
中有了完整的时间表,您可以使用它来检查现有的匹配项。
您可以尝试不同的策略:
对于球队数量为奇数且天数为偶数的循环赛,未来恰好有一天,已经轮空的球队子集将与轮空的球队进行比赛已经,并且所有尚未轮空的球队要么在当天轮空,要么与尚未轮空的球队比赛。
您需要做的就是不断生成循环table,直到找到这一天并使用当天的比赛。