Круглый Робин Планировщик Заполнение «до свидания»

Я использую Round Robin для планирования игр. Я бы хотел, чтобы каждая команда играла в «n», а у меня есть «x». Все замечательно, если «x» четное, но если «x» нечетное, я должен добавить еще одну команду, «пока», чтобы заставить ее работать.

Когда у меня есть 11 команд, играющих по 4 игры в каждой, с прощанием все получается так, что 4 команды получают до свидания. Это неэффективно, поскольку они могут просто играть друг с другом, чтобы каждая команда играла в 4 игры.

После составления расписания всех игр, в том числе игр, в которых одна команда «до свидания», я пытаюсь собрать все команды, у которых была «до свидания», и заставить их играть в одну игру друг против друга. Мне нужно убедиться, что команды не играли раньше.

Поскольку я использую небольшое количество команд, я просто использую рандомизатор, чтобы попробовать комбинации, пока одна из них не сработает. Однако я не могу заставить это работать.

Вот мой код, который расписывает команды, которые по раундам играли друг с другом. Я хотел бы пройти и проверить, играли ли они раньше, и, если они имели, рандомизировали список, чтобы мы могли попробовать другую комбинацию. Я не думаю, что проверка того, играли ли команды до сих пор, работает, так как она никогда не перетасовывает команды, даже если они перекрываются.

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;
}
}

0

Решение

if ($conn->query($sql) === TRUE) не верно, если вы используете его для select заявление см. документация:

Возвращает FALSE при ошибке. Для успешных запросов SELECT, SHOW, DESCRIBE или EXPLAIN mysqli_query () вернет объект mysqli_result. Для других успешных запросов mysqli_query () вернет TRUE.

Так как вы делаете это дважды, вы можете полностью удалить эту строку и просто использовать

$sql = "SELECT * FROM `temp`
WHERE (Home = '$home' and Away = '$away')
or (Home = '$away' and Away = '$home')";
if ($result=mysqli_query($conn,$sql)) {
...

В качестве альтернативы, так как у вас есть полное расписание в вашей переменной $round вы уже можете использовать это для проверки существующих совпадений.

И вы можете попробовать другую стратегию:

Для круговой игры с неравным количеством команд и четным числом дней в будущем наступит ровно один день, когда подмножество команд, у которых уже есть свидание, будут играть против команды, у которой уже есть свидание, и всех команд. у которых еще нет прощания, либо в этот день будет прощание, либо игра с командой, которая еще не прощалась.

Все, что вам нужно сделать, это продолжать генерировать круглый стол, пока вы не найдете этот день и не используете совпадения этого дня.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]